「オープンスキーマ」を備えたデータベース - 良いアイデアか悪いアイデアですか?

StackOverflow https://stackoverflow.com/questions/2854312

質問

Redditの共同設立者は、何百万人ものユーザーに拡大しながら、彼らが抱えていた問題についてプレゼンテーションを行いました。概要が利用可能です ここ.

私が驚いたのはポイント3です。

代わりに、彼らは物とデータテーブルを保持します。 Redditのすべては、ユーザー、リンク、コメント、subreddits、賞などのものです。データテーブルには、Thing ID、Key、Valueの3つの列があります。すべての属性に行があります。タイトル、URL、著者、スパム投票などの行があります。新しい機能を追加すると、データベースについて心配する必要がなくなりました。新しいものに新しいテーブルを追加したり、アップグレードを心配する必要はありませんでした。

これは私にとってひどい考えのように思えますが、Redditでうまくいったようです。しかし、それは一般的に良い考えですか?それとも、たまたま彼らのためにうまくいったRedditの特異性ですか?

役に立ちましたか?

解決

これは、と呼ばれるデータモデルです EAV にとって エンティティアトリブの価値. 。それはその用途があります。主要な例は、実行される可能性のある数十万のテストがあるため、自然にまばらな患者テストデータですが、通常、患者にはほんの一握りしか存在しません。数十万の列のあるテーブルはばかげていますが、EAVのあるテーブルは理にかなっています。

他のヒント

本当に大きなWebサイトのほとんどは、データベースの側面で何らかの信じられないほどシンプルなものを使用することになります。これには、高速でスケーラブルであるという利点があります。 (トリガーなどを介して)自動的に実施するためにデータベースを取得するすべての関係があなたを取得するという不利な点があります 必要 代わりにクライアントコードで自分自身を実施する。一貫性を維持することは首の痛みであり、少なくとも短期間、データが一貫性がないという可能性はほとんど常にあります。

ソーシャルネットワーキングサイトの場合、それは価値のある妥協です。ほとんどの場合、ほとんど正しいデータが適切です(たとえば、アイテムに対して受け取るアップ投票数が実際に20ミリ秒の場合、送信時には20ミリ秒の場合は本当に気になります)。ユーザーは非常に重要です。

私は、彼らがそのデータに対するレポートを作成する際の容易さや困難について何も言及していないことに注目しました。狭い状況で使用される場合、EAVは有益です。ほとんどのシステムの中心的な部分として、レポートにヒットすると悪夢になります。 EAVSの問題は、特にデータの整合性が深刻な欠如のために、ほとんどの利点がプロジェクトの最初にあり、痛みのほとんどが分析と報告の後半であることです。私には「外国の鍵を心配する必要はありません」は、孤児の列の悪夢のように聞こえます。すべてに代理キーの使用を追加すると、一般的に完全な書き直しで終わる絡み合ったモラスがあります

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top