Hypertable と HBase は 2 つの主要なオープン ソース BigTable 実装のようですが、これら 2 つのデータベースの主な長所と短所は何ですか?
さらに、BigTable と SQL RDBMS の主な長所と短所は何ですか? また、Postgres や Hypertable などの従来の RDBMS を使用してプロジェクトを作成する場合に期待できる大きな違いは何ですか?
Hypertable と HBase は 2 つの主要なオープン ソース BigTable 実装のようですが、これら 2 つのデータベースの主な長所と短所は何ですか?
さらに、BigTable と SQL RDBMS の主な長所と短所は何ですか? また、Postgres や Hypertable などの従来の RDBMS を使用してプロジェクトを作成する場合に期待できる大きな違いは何ですか?
2番目の質問を必要以上に広げるリスクがあります(BigTableで遊んだことはありませんが、MongoDBとCouchDBをいじったことがあります)...
とにかく私が理解している限り、最も重要な違いは、RDBMS はすべて行ベースのストアを使用するのに対し、NoSQL エンジンは列ベースのストアを使用することです。長所と短所は主にこの点から導き出されます。
http://en.wikipedia.org/wiki/Column-directional_DBMS
私が心に留めておく主な考慮事項は、ACID コンプライアンスです。NoSQL エンジンは、常に一貫性があるというよりは、結果的に一貫性があります。Web サイトのキャッシュのように動作するストレージのようなものと考えてください。後者は通常有効で一貫性がありますが、わずかに古くなっている/一貫性がない場合があります。
ここに正解も不正解もありません。一部のユースケース (検索エンジン、ブログなど) では、多少の一貫性のなさは非常に受け入れられるオプションです。他のもの (例: 銀行、課金システム) ではそうではありません。(私は原子性が必要なものに取り組む傾向があります。)
次に、実装の詳細に分解される多くのパフォーマンスに関する考慮事項があります。
結果整合性を追求することの直接的な結果は、整合性チェックなどは通常、データ ストアではなくアプリで実行されることです (つまり、トリガーやストアド プロシージャはありません)。データ ストアで実行する作業が少なくなるため、明らかにパフォーマンスが向上します。
列ベースのストアとは、ドキュメントから 1 つの列を更新すると、その列のみが無効になることを意味します。対照的に、行ベースのストアは行全体を無効にします。データを通常どのように更新するか (つまり、ほんの数列とほとんどの列) に応じて、どちらのアプローチも追加できます。
列ベースのストアの裏側は、(実装の観点から) 結合がより複雑になることです。極端に単純化して言えば、列ごとに EAV テーブルがあると考えてください。これは、いくつかのテーブルでうまく機能します。売上高や株式数に関する多数の結合を必要とする大きなレポートが必要な場合は話が別です (優れた RDBMS であれば問題なく処理できます)。
より経験豊富なユーザーは、NoSQL のシャーディングとレプリケーションに参加してくれることを願っています。これについては、Postgres には 9.0 以降組み込みのレプリケーション機能があり、複数のパーティションにまたがるクエリの処理に非常に優れていることを指摘するのに十分満足できると思います。
とにかく...非常に長い話を短くまとめると、次のプロジェクトで多数のデータセンターで数ペタバイトおよび数億のリクエストに即座にスケーリングする必要があることをすでに知っていない限り、私はあなたが持つべき唯一の考慮事項だと思います. SQL または NoSQL の実装を選択する際に考慮すべきことは、ACID への準拠が絶対に必要かどうかです。
最後に、新しいおもちゃを試すことに主な関心がある場合は、代わりにグラフ指向のデータベースを試すことを検討してください。これらは、行ベースと列ベースのストアの利点を組み合わせる可能性があります。