2011-07-21 6 views
2

分散ストアデータベースの「スキーマ」を設計し始めました。NOSQLデザイン、非正規化なし?

私はどの程度非正規化するかについて精神的な議論を続けています。私はそれを行う方法を理解しています。なぜなら、非正規化がクエリとよく一致して複数の場所からデータを収集するのを最小限に抑えるならば、パフォーマンスが向上する理由は...

...しかし、成熟前の最適化は悪いと言われます。エレガントで柔軟性があり、重複したデータの一貫性を維持することについての心配もありません。

だから私は今、それが妥当な戦略であるかどうか疑問に思っています。非常にリレーショナルな方法でスキーマを設計し、必要に応じてアプリケーションレイヤーを使用してデータを収集し、必要に応じて後でこれを変更します。

トラフィックが問題になる場合は、設計変更(分離、非正規化)を行って、水平方向に拡大縮小することができる技術にすでに取り組んでいます。

それが中で最良の選択かもしれないように思える:フル非正規化設計(スケール・レディ)

  • で、必要に応じて分散店で
  • 分散ストアにスタートを移動し、RDBMSとの

    • 開始リレーショナル設計の分散ストアから始め、必要であれば非正規化+分離する

    考えられますか?最後のアプローチは非常に合理的に聞こえるthaty

    おかげ

  • +0

    リレーショナルデータストアの容量を超えるとしたら、どの程度の信頼性がありますか?あなたはその能力が何であると認識していますか?そして、リレーショナル・キャパシティのどの次元を超えると予想されますか(データ量、トランザクション・レートなど)?そして、あなたのデータ設計はどのように固定されていますか?あなたは、最も重要な関係上の利点 - スキーマの可用性 - の1つについて言及していません。 – dkretz

    +0

    @le dorfier製品が成功した場合、書込み回数のために従来の方法で結合された3-4台の太字のmySQLサーバーの容量を超えます。もちろん、アプリケーションレイヤインテリジェンスを使用してmysqlインスタンスを分散ノードとして動作させる方法はありますが、noSQLソリューションは、アプリケーション層コードを少なくしてこれらの機能を提供するようです。スキーマの可用性は本当に問題です:-( –

    答えて

    0

    スケーラブルスキーマには本当に重大な欠点がないと仮定して、オプション2を使用します。

    分散ストアを後で使用する必要がある場合は、複数のスキーマバージョンを処理するのではなく、最初から最終システムに似たものを使用することもできます。 NoSQLの設計は、リレーショナル設計より複雑なものである必要はありませんが、それらは異なっています。 NoSQLプラットフォームの多くは、成熟しているため、SQLのように初期開発に使用するのが容易です。

    一般的なリレーショナルデータベースの結合の多くは、複数の値や階層構造をサポートしていないため、水平方向のスケーリングを行うにはあまりに複雑すぎる必要はありません。

    +0

    NoSQLの世界では、あなたの共通化された値がすべてのレコードに複製されるので、非正規化された "複数の値"と "階層構造"が更新されています – Anentropic

    +0

    システム的な方法また、重複する値、真の子オブジェクトについては何も言わなかった - 一部のシナリオでは、フラットテーブルをサポートするだけでSQLの重大な制限がある。 –

    0

    は、私が思うに、私はいくつかのコメントがあります。もはやリレーショナルdbmsは存在しないので、リレーショナルではなくオブジェクト指向の設計を使用することを提案します。たとえば、1対多の関係、つまり「所有」意味を持つ場合、両辺を1つのオブジェクトに入れて1つのオブジェクトとして格納できます。私はこのアプローチがNOSQLの言葉で完全に「正規化された」と考えることができると思います。

    2

    正常に正規化されたリレーショナルデータベースthe old fashioned wayを拡大縮小したとお考えですか? NoSQLは、ボトルネックを原油ではあるが効果的なものに置き換えることによって、単純でも設計の難しいPHP /ランプアプリの拡張も可能にすることで、名声を得ています。あなたが優雅なデザインを持っていない場合、は、スケールアウトするNoSQL NoSQLです。

    +0

    このリンクは、実装ではなくアーキテクチャの考え方を記述している。私はあなたが独立して機能することができるようにデータを分割するアプリケーション層でいくつかの独立したRDBMSノードを使用することを意味していると推測しています。パーティションを処理します。 –

    関連する問題