1

私は、ユーザーが独自のデータベースを作成し、自動生成されたフォームとビューでレコードを収集/提示できるという点で、Wufoo に似たアプリケーションに取り組んでいます。

すべてのユーザーが異なるスキーマを作成しているため (あるユーザーは自分の野球カード コレクションのデータベースを持ち、別のユーザーはレシピのデータベースを持っている可能性があります)、現在のアプローチでは MySQL を使用して、ユーザーごとに独自のテーブルを持つ個別のデータベースを作成しています。つまり、MySQL サーバーに含まれるデータベースは次のようになります。

main-web-app-db (ユーザー アカウント情報、請求などのテーブルを含む Web アプリ)
user_1_db (baseball_cards_table)
user_2_db (recipes_table)
....

等々。ユーザーが自分の DVD コレクションを追跡するために新しいデータベースをセットアップしたい場合は、「テーブルの作成 ...」を使用して「データベースの作成 ...」を実行します。何らかのデータを入力してから、列を変更したいと判断した場合は、「alter table ....」を実行します。

さて、これを構築していくにつれて、MySQL はこれを処理するのにあまり適していないように思えます。

1)私の最初の懸念は、最初に認証などのためにメインアプリのデータベースに、次にユーザーの個人データベースに、リクエストごとにデータベースを切り替えることは非効率になることです。

2) 私が抱えている 2 番目の懸念は、単一の MySQL サーバーがホストできるデータベースの数に制限があることです。このアプリケーションには 500,000 のユーザー データベースがあると仮定しますが、MySQL はこのように動作するように設計されていますか? それが100万以上だったら?

3) 最後に、この方法はサポートと拡張が困難になるのでしょうか? MySQL がこのように使用されているという話は聞いたことがありません。そのため、これがレプリケーションやその他のスケーリング方法などにどのように影響するか心配しています。

私には、MySQL はこのように使用するために構築されていないように思えますが、私は何を知っていますか? MongoDB、CouchDB、Redis などのドキュメント ベースのデータベースを代替手段として検討してきました。これは、この特定の問題に対するスキーマレス アプローチが非常に理にかなっているように思われるからです。

誰でもこれについてアドバイスを提供できますか?

4

2 に答える 2

2

スキーマはユーザーに任せているため、スキーマの定義を強制するリレーショナルデータベースを使用することは意味がありません。

NoSQLデータベースを使用します。スタックオーバーフローについてもう少し読んでください。

NoSQLとは何ですか、どのように機能し、どのようなメリットがありますか?

ドキュメントベースのデータベースとリレーショナルデータベースの長所/短所

最高のドキュメント指向データベースは何ですか?

于 2010-03-16T14:12:17.417 に答える
1

あなたが説明するようにその場でテーブルを作成することは非常に悪い考えです。スキーマの変更をサポートすることは悪夢です。誰かがフィールドを追加または削除するたびに、ALTER TABLE ...コマンドを実行する必要があります。テーブルにデータがある場合、基本的に新しいscehmaで新しいテーブルを作成し、すべてのデータを新しいテーブルに移動するため、これは簡単な操作ではありません。 。そのルートを下りないでください。

あまり手間をかけずにMySQLの上にある種のキー/値ストアを実装したり、Friendlyのようなものを使用したりできますが、適切なドキュメントデータベースを使用する方がおそらくはるかに簡単な方法です。

MongoDBが私の選択ですが、考慮すべきことがたくさんあり、他の人はCassandraの方が良いと言うかもしれません。MongoDBを使い始めるのは非常に簡単で、それを使用することはSQLデータベースの使用に非常に慣れていると感じます。インデックス作成はほぼ同じように行われ、クエリもそれほど違いはありません。ただし、おそらく最良のことは、ORMは必要ないということです。オブジェクトは、多かれ少なかれデータベースにそのまま保存されます。読み取りと書き込みは、オブジェクトとの間で多くのマッピングを必要とせずに、金属の非常に近くで実行できます。

于 2010-04-05T18:57:27.290 に答える