2011-06-21 13 views
2

私は、新しいエントリを保存する前に、主にIPアドレスで重複したエントリを検索するシステムを実装しようとしています。 NoSQLデータベースは最終的な一貫性を持っているので、これは自然なユースケースのようではありません。それを動作させる方法はありますか?重複した項目を効果的に検出できるNoSQLデータベースはありますか?

+0

すべてのNoSQL DBが最終的な一貫性を持っているわけではありません...どちらを使用していますか? – bdonlan

+0

最終的な整合性は、リレーショナルデータストアにも存在します。たとえば、MySQLのレプリケーションは、常に**最新ではありません**。レプリケーションの遅れがあるのは確かです。議論は明らかにあなたが奴隷ではなく主人公に挿入されていることになるので、遅れは重要ではありません。これはMongoDBのようなDBの場合と同じ答えになります。この場合、最終的な一貫性は読み込みの方が重要です。 –

+0

重複するエントリを定義しますか? – synhershko

答えて

3

CouchDBは、ドキュメントの_idフィールド内で一意性を強制します。ここからと抜粋http://guide.couchdb.org

CouchDBデータベース内では、各ドキュメントに固有の_idフィールドが必要です。データベースに一意の値が必要な場合は、ドキュメントの_idフィールドに値を代入すれば、CouchDBは一意性を強制します。

ただし、配布されたケースでは、書き込み要求を受け付ける複数のCouchDBノードを実行している場合、ノードごとまたはCouchDB外で一意性が保証されます。 CouchDBでは、2つの異なるIDに2つの同一のIDを書き込むことができます。レプリケーション時に、CouchDBは競合を検出し、それに応じてドキュメントにフラグを立てます。

+0

問題を理解するのを手伝ってくれてありがとう。明確にするために、私のケースでは、 "重複"エントリが複数の固有のフィールドで検出されなければなりません。スペックはまだ完全に書かれていないので、私はまだ情報を収集しています。今では、RDBMSを使用する場合と同様に、重複した検出と書き込みを単一のノードに限定する必要があることがわかりました。 VoltDB(実際はNoSQLではない)では、すべてのノードがデータの同じビューを持っていると思われます。たぶん私はこれのようなものを使用することができますか? – mpso

0

すべてのリレーショナルデータベースとMongoDBは、重複したデータの挿入を防止するデータテーブル/コレクションのユニークなインデックスをサポートしています...なぜそれで十分ではありませんか?

MongoDBでユニークなインデックスを作成するのは簡単です。重複したエントリを挿入しようとすると、エラーが発生します(セーフモードを有効にしている場合や、挿入操作の結果である を確認している場合)。

+0

特定の状況で重複したエントリが許可されるので、新しいものを保存する前にレコードを検索する必要があります。メインノードに書き込みを制限することでこれを行うことはできますか? – mpso

+0

私はあなたを正しく理解していますか?最初にレコードを読んだ後、重複をチェックしてから書き込みます。重複はIPアドレスでチェックされ、アプリケーション層のロジックによって強制され、IPアドレスで一意性をチェックするので、これらが別個のトランザクションであっても、これは依然として原子的になります...私は地球上のすべてのデータベースがこれをサポートしていると思います。 –

+0

申し訳ありませんが、適切な回答を得るために、より一貫した方法で質問してください。 –

関連する問題