2013-06-02 28 views
5

私のアプリケーションのデータモデルには良い考え方があります。 ほとんどのスレッドは電子商取引製品に焦点を当てています。私のシナリオは多少異なります。単一テーブルの継承、EAVまたはNoSQL?

目標は、顧客から受け取ったアイテムを保管し、それらに報告することです。 最初のレポートは単純なリスト(これらはあなたのアイテムとそのキー/値のペアです)ですが、私はコレクション全体の将来のクエリの準備をしたいので、EAVは良いアプローチです。

各アイテムは(繰り返しの)タイプであり、各アイテムは柔軟な量のキーと値のペアを持ちます。 私たちは約15種類のアイテムタイプを持っており、成長する可能性はあまりありません。

キーと値のペアの量は4と20の間で低くなります(要件ごと)はアイテムタイプに基づいていませんが、そのアイテムはに属します。

明確にするために、顧客は、アイテムの状態を別の場所に保存したい場合や、代替IDを保存したい場合があります。それは本当に依存しています。 したがって、いずれのアイテムタイプもその顧客のすべてのキー/値を取得するため、私のセットにはNULL値が設定されている可能性が非常に高いです。それで私は考えます単一テーブル継承(NULL値を持つ)は受け入れ可能ですが、顧客が希望するキーの名前を決定するため、何らかのマッピングを使ってfield_1 field_2などにする必要があります。 どちらが私にはあてはまらないのですか?

顧客アイテム(およびそのキー/値)の集まりは、通常、20より大きく、< 500であるため、顧客あたりのデータセットは確かに巨大ではありません。

おそらく、実際に収集されたアイテムレコードを「文書」としてNoSQLデータベースに移動するのは、アプリケーション自体のためにMySQLでEAVを実行するのがよいアプローチです(Redis etすべて)を処理しますか?

これは、RDBMSで解決できなければならないことを複雑にしていますか?

私はこの解決策のように思われますが、確かに私の数字は非常に低いので、このhttp://backchannel.org/blog/friendfeed-schemaless-mysqlに出くわしました。

答えて

10

あなたがリストアップした3つのアプローチのすべてでプロジェクトを行ったことで、私はあなたに固くて早い方向を与えることはできませんが、前進して正しいアプローチを選ぶことについていくつかアドバイスを提供できます。

ヒント:

  1. は、可能な場合は技術を混在しないようにしてください。個人的な経験から、私はこれが非常に困難であることが分かった。また、あなたは大規模なサイトを頻繁に読んで、縮尺を調整する必要があります。常にはアーキテクチャをシンプルにしています。彼らは、MySQLとMongoDBのようなものを混在させて起動し、単純なものにするためにMongoDBを捨てます。

  2. あなたの質問は、分析の麻痺のビットに苦しんでいるようです。 "私はXYZをすることができますが、それはABCが不可能であることを意味します。"あなたのシステムに関するいくつかの点や事実を修正し、プロトタイプの作成を開始することをお勧めします。あなたは良いアイデアを持っているようですが、あなたがビルドを始めるまで、彼らが本当にいいか分からないでしょう。

  3. すべての決定に影響があります。あなたのソリューションの最初の80%はおそらくかなり速く簡単です。最後の20%は妥協で構成され、かなり醜いかもしれません。ちょうどそれを準備し、それで大丈夫です。

  4. 私の経験から、文書データベース(NoSQL)のアプローチはまだまだ危険です。ドキュメント開発の一年を成し遂げたことから、最も困難なのはデータのモデリングでした。あなたがその道を踏み切りたいのであれば、データモデリングを勉強してください。それはあなたに多くの苦痛を救うでしょう。

+0

あなたの洞察をいただきありがとうございます。ポイント2に関して、私の問題は、どのような報告が必要なのか分かりません。今はEAVで完全に可能なリストで十分です。 NoSQLがSQLよりも優れたものを解決するかどうかは、私が心配している未知のシナリオです。基本的にはポイント3です.NoSQLを使用することは魔法の解決策ではないことを認識しています。後でいつでもその形式にエクスポートできると思います。 – MattW

関連する問題