2011-01-31 5 views
3

友人の友人とつながるようなアプリケーションを開発する予定です。 FacebookやTwitterのように見えるかもしれませんが、当初はNOSQLデータベースの詳細を学ぶために実装しようと考えています。NOSQLデータベースツールは、私のアプリケーションに適していますか?

NOSQLには多くのデータベースツールがあります。私は、ドキュメントストア、キーバリューストア、カラムタイプ、グラフデータベースなどの多くのデータベースタイプを使いました。最後に、cassandra & Neo4Jという2つのデータベースツールを用意します。いずれか1つを選択するのは正しいですか?私に問題がなければ&あなたの貴重なご意見をお寄せください。

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

私の質問は、 私のアプリケーションに適したデータベースツールはどれですか?

あなたの貴重なご意見をお待ちしています。あなたの貴重な時間を過ごしてくれてありがとう。

+4

これは主観的な質問です。あなたは具体的に意見を求めています。 – TheCloudlessSky

+0

お時間をありがとう。いずれの人も自分の意見を提供することができますが、私は自分の意見やそれがどのように私に合っているかを選択して勉強することができます。そして私は彼らの意見に従って勉強する機会があります。それが貴重な意見を求める背後にある理由です。 – NANI

答えて

1

私は、複数の可用性ゾーンにわたるデータ協定に関するカッサンドタ整合性モデルのすべての意味を理解していません。

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

すべてのゾーンが同じシステムクロックで機能しますか。または、各ゾーンには独自のクロックがありますか?同じクロックで動作しない場合、どのように同期して、相違が相殺されたときの「治癒」プロセスでタイムスタンプを比較できるのでしょうか?

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

4

ティム、あなたは実際にOPに答えたのではなく、あなたの質問を別に投稿していたはずです。

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

完了しましたか?さて、特定の質問について:

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

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

"すべてのゾーンが同じシステムクロックで機能しますか?"

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

たとえば、Twitterのクローンであなたのフォローしているユーザーのリストがある場合は、各フォロワーに独自の列を渡す必要があります。クロックがどのように同期していてもデータを失うことはありません。

あなたのウェブサイト用の管理ツールがあり、2人の管理者が新しいfaviconを同時にアップロードすると、1つのアップデートが勝つことになります。ここでは、クロックを同期させたいが、「数ミリ秒以内」で十分だ。

ユーザ登録を管理していて、アカウント「jbellis」がまだ存在しない場合にのみ作成できるようにするには、時計がどれくらい同期していてもロックマネージャが必要です。

"古いデータが返されますか?"

ノード(「ゾーン」よりも優れていると考えられるユニット)には、読み取り修復、ヒント付きハンドオフ、またはアンチエントロピー修復によってそのデータが送信されるまで、ダウンタイム中に欠落したデータはありません。その間、古いデータの読み取り要求に応答します。十分な一貫性レベルを使用すると、読み取り要求は他の十分な応答を待って、常に最新のバージョンが表示されるようにします。これは、十分な他の複製がダウンした場合に要求を満たすことができない可能性があります。それ以外の場合は

、低consistencylevel(例えばONE)が暗黙のうちに、「私はこの下consistencylevelで取得高い可用性と低レイテンシーは私が一時的にダウンタイムの後に古いデータを見て大丈夫意味を理解しています。」という意味します

+2

同時性モデルの説明に感謝します。 P.S.コメントがこのサイトで長くなり、フォーマットされた場合、私の返信はコメントになりました。なぜなら、それは80%のコメントであり、20%の回答しかなかったからです。会話に積極的に参加するために、このウェブサイトのルールに違反していることがあります。 – Tim

1

あなたが説明したようなネットワークを格納するように設計されているので、私は短期間で拡大縮小する必要はありません。あなたが最終的に縮尺を調整する必要がある場合、多分あなたはそれの前にギザードを投げることができます。幸運を祈る!

0

Riakを見ましたか?それはCassandraと同じ背景を持ちますが、タイムスタンプの同期に気を付ける必要はありません(データステータスを解決するための別の方法が必要です)。

私の最初のアプリケーションは、カサンドラデータベースをベースにしていました。でも今はお試しになりましたRiakより適しています。キーの違い(キー - 値/スーパーカラム - キー - 値)だけでなく、ドキュメントストアの機能もあります。

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

また、http/sでよく知られている定義済みのアクセスプロトコルを使用しているため、トラフィックが多いときにサーバーを管理するのは簡単です。

唯一の悪い点は、カッサンドラよりも遅いことです。しかし、通常、あなたは書き込みよりも多くのレコードを読み込みます(そして、Cassandraは書き込みではなく書き込みに最適化されています)ので、最終結果はOKです。

関連する問題