8

オンライン アプリのカスタム フィールドの複雑な Mysql データ構造の問題に答えようとしています。私はMysqlにかなり慣れていないので、どんな入力でも大歓迎です。

現在のデータベースはリレーショナル データベースであり、サービスの各ユーザーは同じデータベースとテーブルを共有します。

これが私がやろうとしていることの例です。

リストを作成しようとしているとしましょう。このリストには、最大 30 個のカスタム フィールドを含めることができます。ユーザーは 12 の固有の要素から選択でき、各要素は最大 15 のユーザー定義属性を持つことができます。

各リストは、アカウント内だけでなく、アカウント間でも一意にすることができます。アカウントには多数のリストを含めることができ、各リストには要素の数や要素ごとに異なる属性を含めることができます。

要素には、複数の選択肢、ラジオ ボタン、電話番号フィールド、住所、1 行のテキスト、複数行のテキストなど、さまざまなものがあります。

複数選択 (チェックボックス) 要素の属性の例: 赤、緑、青、オレンジ、白、黒

1 行のテキスト要素の例は次のとおりです。名の入力フィールド。

各要素には、アプリの他の機能で参照および使用できるユーザー定義のタイトル フィールドとタグ フィールドも必要です。

セグメンテーションも非常に重要です。ユーザーは、任意の要素に基づいてリストをセグメント化できる必要があります。たとえば、ユーザーは、"red" が複数選択要素 #1 に存在するすべてのレコードに基づいて、リスト "ABC" をセグメント化したい場合があります (リストに複数の複数選択要素がある場合があります)。

この例では、配列、EAV、シリアル化された LOB が正常に機能すると仮定します。ただし、自分の規模で自分のニーズに最適な構造が何であるかはわかりません。

実際には、リストごとに最大 50,000 件のレコードが存在する可能性が高く、実際には 20,000 件以上のアカウントが存在する可能性があり、それぞれに多数のリストがあります。したがって、私は最も効率的で柔軟な構造を探しています。

問題をさらに複雑にするために、いつでも特定のリストに要素を追加/削除する効率的な方法を確保する必要もあります。たとえば、ユーザーがカスタム フィールドの最大許容数 (30) でリストを作成し、3 か月後にフィールドを削除することを決定した場合、そのリストとそのカスタム フィールドに関連付けられているすべての値を見つける方法が必要です。次に、すべての値、要素タイプ、およびその属性を削除します。ユーザーは、このリストに新しい要素を追加できます。

このサイトの EAV 投稿の多くと、このhttp://www.martinfowler.com/eaaCatalog/serializedLOB.htmlを確認しました。回収のデメリット。

また、多次元配列がこの規模でどれだけうまく機能するのだろうか? wordpressはこれをカスタムフィールドに使用していると思います。

この状況でデータベースを構築する最善の方法について、ご意見をお寄せいただければ幸いです。ありがとうございました!

4

2 に答える 2

3

FriendFeedがカスタムフィールドを実装する方法について読むことができます:http: //bret.appspot.com/entry/how-friendfeed-uses-mysql

これらは、シリアル化されたLOBと、転置インデックスを含む追加のテーブルの組み合わせを使用します。LOB内のすべての可能な属性に追加のテーブルは必要ありません。インデックスの助けを借りて検索したい属性だけが必要です。

于 2011-11-16T19:10:26.473 に答える