重複
GoogleのBigtableについてはよく知りませんが、GoogleのBigtableとMySQLのようなリレーショナルデータベースの違いは何なのかと思っています。両方の制限は何ですか?
Bigtableは、会社が定期的に扱っている大量の情報を処理するためのGoogleの発明です。Bigtableデータセットは、ストレージが多数のサーバーに分散されているため、巨大なサイズ(数ペタバイト)まで成長する可能性があります。 Bigtableを使用するシステムには、GoogleのウェブインデックスやGoogle Earthなどのプロジェクトが含まれます。
この件に関する Googleホワイトペーパー によると:
Bigtableは、スパースで分散された永続的な多次元ソートマップです。マップには、行キー、列キー、およびタイムスタンプによってインデックスが付けられます。マップ内の各値は、解釈されていないバイトの配列です。
MySQLなどのBigtableの内部メカニズムは非常に似ていないため、比較が難しくなり、意図された目標もあまり重複しません。ただし、Bigtableは単一テーブルデータベースのように考えることができます。たとえば、MySQLデータベースを使用してGoogleのウェブ検索システム全体を実装しようとした場合に遭遇する困難を想像してみてください。Bigtableはこれらの問題を解決するために構築されました。
Bigtableデータセットは、SQLのサブセットに基づくGQL(「gee-kwal」)と呼ばれる言語を使用して、AppEngineなどのサービスからクエリを実行できます。 GQLから目立って欠けているのは、あらゆる種類のJOIN
コマンドです。 Bigtableデータベースの分散された性質のため、2つのテーブル間で結合を実行することは非常に非効率的です。代わりに、プログラマーはそのようなロジックを自分のアプリケーションに実装するか、それを必要としないように自分のアプリケーションを設計する必要があります。
GoogleのBigTableと他の同様のプロジェクト(例: CouchDB 、 HBase )は、データがほとんど 非正規化 になるように向けられたデータベースシステムです(つまり、複製されます)とグループ化)。
主な利点は次のとおりです。-非正規化のため、結合操作のコストが低くなります。-データの独立性のため、データのレプリケーション/配布のコストが低くなります(つまり、2つのノードにデータを分散する場合、おそらく問題は発生しません。類似のデータがグループ化されているため、あるノードにエンティティがあり、別のノードに他の関連エンティティがある)
この種のシステムは、最適なスケールを達成する必要があるアプリケーションに適しています(つまり、システムにノードを追加すると、それに比例してパフォーマンスが向上します)。 MySQLやOracleなどのRDBMSでは、同じノードにない2つのテーブルを結合する場合にノードの追加を開始すると、結合コストが高くなります。これは、大量を処理する場合に重要になります。
RDBMSは、ストレージモデル(テーブル、結合、fks)が豊富であるため、優れています。分散データベースは、拡張が容易なため素晴らしいです。