3

友達の友達の友達とつながるようなアプリケーションを開発する予定です。Facebook や Twitter のように見えるかもしれませんが、最初は NOSQL データベースについてもっと学ぶためにそれを実装することを計画しています。

NOSQL には多数のデータベース ツールがあります。ドキュメント ストア、キー値ストア、列タイプ、グラフ データベースなど、多くのデータベース タイプを経験してきました。そして最後に、cassandra と Neo4J という 2 つのデータベース ツールを考え出しました。どちらかを選択するのは正しいですか、そうでない場合は、私を修正し、貴重な意見をいくつか提供してください。

もう1つ、私が選んだ言語バインディングはJAVAです。

私の質問は、どのデータベース ツールが私のアプリケーションに適しているかということです。

貴重なご意見お待ちしております。貴重なお時間を割いていただきありがとうございます。

4

4 に答える 4

4

ティム、OPへの回答としてではなく、質問を個別に投稿する必要がありましたが、そうではありませんでした。

しかし、答えるには、まず http://www.slideshare.net/benjaminblack/introduction-to-cassandra-replication-and-consistency にある Ben Black のスライドを読んでください

終わり?さて、具体的な質問について:

「[レプリカ] のデータ状態の違いは、その後の読み取りでどのように調整されますか?」

最も高いタイムスタンプが勝ちます。

「すべてのゾーンは同じシステム クロックで動作しますか?」

タイムスタンプはクライアント (つまり、アプリ サーバー) によって提供されます。それらは ntpd などと同期する必要があります (とにかく良い方法です) が、順序付けが重要な場合は、一意の列名を使用するか、外部ロックを使用して競合を回避する必要があるため、高精度は必要ありません。

たとえば、Twitter のクローンであなたをフォローしているユーザーのリストがある場合、各フォロワーに独自の列を与える必要があり、時計がどれほど同期していなくてもデータを失う方法はありません。

Web サイト用の管理ツールがあり、2 人の管理者が新しいファビコンを「同時に」アップロードした場合、1 つの更新が優先され、どちらが重要でもありません。ここでは、クロックを同期させたいと考えていますが、「数ミリ秒以内」で十分です。

ユーザー登録を管理していて、アカウント "jbellis" が存在しない場合にのみアカウントの作成を許可したい場合は、クロックがどれほど厳密に同期されていても、ロック マネージャーが必要です。

「古いデータは返されますか?」

ノード (「ゾーン」よりも優れた単位) は、読み取り修復、ヒント付きハンドオフ、または反エントロピー修復によってデータが送信されるまで、ダウンタイム中に失われたデータを持ちません。その間、古いデータを含む読み取り要求に応答します。十分に高い整合性レベルを使用すると、読み取り要求は他の十分な応答を待機して、とにかく常に最新バージョンが表示されるようにします。これは、十分な数の他のレプリカがダウンしている場合に要求を満たすことができないことを意味する場合があります。

それ以外の場合、低い整合性レベル (例: ONE) は暗黙のうちに、「この低い整合性レベルで得られる高可用性と低レイテンシーは、ダウンタイム後に一時的に古いデータが表示されても問題ないことを意味することを理解している」ことを意味します。

于 2011-01-31T15:15:22.330 に答える
1

短期的にスケーリングする必要がない場合は、あなたが説明したようなネットワークを保存するように設計されているため、Neo4j を使用します。(最終的にスケーリングする必要がある場合は、その前に砂肝を投げることができます。頑張ってください!)

于 2011-01-31T19:21:42.090 に答える
1

複数のアベイラビリティ ゾーンにまたがるデータの合意に関する Cassandata 整合性モデルのすべての意味を理解しているかどうかはわかりません。

複数のゾーンがあり、Cassandra のコーディネーター ノードが、すべてのゾーンがレポートを返す必要はなく、クォーラムのみを要求する整合性レベルを使用している場合、ゾーンのデータ状態の違いは、後続の読み取りでどのように調整されるでしょうか?

すべてのゾーンは同じシステム クロックで動作しますか? それとも、各ゾーンに独自の時計がありますか? それらが同じクロックで動作しない場合、違いが調整される「修復」プロセス中にタイムスタンプを比較できるように、それらはどのように同期されますか?

正確で最新のデータを保持しているゾーンがオフラインになり、以前の書き込み中にオフラインだった (更新されず、古いデータが含まれている) ゾーンがオンラインに戻ったとします。古いデータは返されますか? コーディネーターは、データが古くなったことを知る方法はありますか?

于 2011-01-31T13:01:12.330 に答える
0

Riakデータベースを見たことがありますか? 背景は Cassandra と同じですが、タイムスタンプの同期を気にする必要はありません (データの状態を解決する方法が異なります)。

私の最初のアプリケーションは、Cassandra データベース上に構築されました。しかし、 Riakの方が適しているため、現在Riakを試しています。キーの違い (キー - 値 / スーパー カラム - キー - 値) だけでなく、ドキュメント ストア機能もさらに進化します。

MapReduce を使用して複雑なクエリを作成する方法があります。Cassandra には Hadoop を使用したこのオプションがありますが、難しそうに思えます。

さらに、http/s でよく知られた定義済みのアクセス プロトコルを使用するため、大量のトラフィックがある場合でもサーバーを簡単に管理できます。

唯一の悪い点は、Cassandra より遅いことです。しかし、通常、書き込みよりも多くのレコードを読み取る (そして、Cassandra は読み取りではなく書き込みに対して最適化されている) ため、最終結果は問題ないはずです。

于 2011-01-31T20:12:36.800 に答える