質問

Google BigTableやAmazon SimpleDBなどの新しい学校のデータストアパラダイムは、特にスケーラビリティのために設計されています。基本的に、結合と非正規化を許可しないことがこれを達成する方法です。

このトピックでは、コンセンサスは大規模に参加するようですテーブルは必ずしも高価すぎる必要はなく、非正規化は「過大評価」されます。ある程度 では、なぜこれらの前述のシステムは、結合を許可せず、すべてを1つのテーブルにまとめてスケーラビリティを実現するのですか?これらのシステムに保存する必要があるのは膨大な量のデータですか(数テラバイト)?
データベースの一般的なルールは、これらのスケールに適用されないだけですか? これらのデータベースの種類は、多くの同様のオブジェクトを格納するために特別に調整されているためですか?
それとも、もっと大きな写真を見逃していますか?

役に立ちましたか?

解決

分散データベースは、Orionが示唆するほど単純ではありません。分散データセット上で完全なリレーショナルクエリを最適化するためにかなりの作業が行われました。 Teradata、Netezza、Greenplum、Vertica、AsterDataなどの企業が何をしているのかを見たいと思うかもしれません。 (オラクルはついに最近の発表でゲームに参加しました; MicrosoftはDataAllegroと呼ばれていた会社の名前で彼らの慰めを買いました)。

とはいえ、データがテラバイト単位に拡大すると、これらの問題は非常に重要になります。 RDBMから取得できる厳密なトランザクション性と一貫性の保証が必要ない場合は、多くの場合、非正規化して結合しないほうがはるかに簡単です。特に、相互参照する必要がない場合。特に、アドホック分析を行っていないが、任意の変換でプログラムによるアクセスが必要な場合。

非正規化は過大評価されています。 100テラを扱っているときにそれが起こるからといって、データベースについて学ぶことを気にせず、スキーマ計画とクエリの最適化が不十分なために100万行または2行のクエリを行うのに苦労するすべての開発者がこの事実を使用する必要があるという意味ではありません。

ただし、100テラの範囲にいる場合は、どうしても...

ああ、これらの技術が話題になっている他の理由-人々は、最初はデータベースに決して属していなかったことを発見し、特定の分野の関係を扱っていないことを認識していますが、基本的なキーと値のペア。 DBにあるべきではないものについては、Map-Reduceフレームワーク、または永続的で最終的に一貫性のあるストレージシステムが単なるものである可能性が完全にあります。

グローバルな規模ではありませんが、こうした問題にはBerkeleyDBを強くお勧めします。

他のヒント

私はそれらにあまり精通していません(他の人と同じブログ/ニュース/例を読んだだけです)が、私の考えは、名前の中で通常のリレーショナルDB機能の多くを犠牲にすることを選んだことですスケーラビリティについて-説明してみましょう。

データテーブルに200行あるとします。

Googleのデータセンターでは、これらの行のうち50行がサーバーAに、50行がBに、100行がサーバーCに格納されます。さらに、サーバーDにはサーバーAおよびBからのデータの冗長コピーが含まれ、サーバーEにはデータの冗長コピーが含まれますサーバーC。

(実際には、使用されるサーバーの数はわかりませんが、数百万行を処理するように設定されているため、かなりの数を想像します。)

" select * where name = 'orion'"に、インフラストラクチャはそのクエリをすべてのサーバーに起動し、返される結果を集約できます。これにより、好きなだけ多くのサーバーでほぼ直線的にスケーリングすることができます(FYIこれはmapreduceとほぼ同じです)

ただし、これはいくつかのトレードオフが必要であることを意味します。

いくつかのデータでリレーショナル結合を行う必要がある場合(たとえば、5つのサーバーに分散されている場合)、それらのサーバーはそれぞれ、各行ごとにデータを相互にプルする必要があります 。 10個のサーバーに200万行が分散している場合は、そうしてください。

これはトレードオフ#1-結合なしにつながります。

また、ネットワーク遅延、サーバー負荷などに応じて、一部のデータは即座に保存される場合もありますが、一部は2〜2秒かかる場合があります。 「最も遅い人が終了するまで誰もが待つ」という通常のアプローチはもはや受け入れられません。

これはトレードオフ#2につながります-データが書き込まれた後すぐに表示されるとは限りません。

他のトレードオフがあるかどうかはわかりませんが、私の頭の一番上はメイン2です。

だから私が得ているのは、全体が「非正規化、結合なし」ということです。哲学自体が存在するのは、結合自体が大規模システムで拡大縮小しないためではなく、分散データベースに実装することが実際に不可能だからです。

これは、単一のタイプの大部分が不変のデータを保存している場合はかなり合理的です(Googleのように)。私はここで正しい軌道に乗っていますか?

実質的に読み取り専用のデータについて話している場合、ルールが変わります。非正規化は、必要な作業が増え、ロックに関する問題が増えるため、データが変更される状況で最も困難です。データがほとんど変化しない場合、非正規化はそれほど問題ではありません。

Novadayデータベースの相互運用環境をさらに見つける必要があります。より頻繁にMySQLやMS SQLなどのリレーショナルDBだけでなく、Hadoopなどのビッグデータファームや、MongoDBなどの非リレーショナルDBも必要です。場合によっては、これらのすべてのDBが1つのソリューションで使用されるため、マクロスケールでパフォーマンスを可能な限り等しくする必要があります。つまり、Azure SQLをリレーショナルDBとして使用し、MongoDB用に2コアと3GBのRAMを備えた1つのVMを使用することはできません。ソリューションをスケールアップし、可能な場合はDB as a Serviceを使用する必要があります(不可能な場合は、クラウドで独自のクラスターを構築します)。

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