問題タブ [voldemort]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - JavaプロジェクトのCouchDB、Project Voldemort、Cassandra
現在のプロジェクトのいくつかのnoSQLソリューションを評価しています。私の注意を引いたさまざまなシステムは現在
彼らが書いたので、最後のものは私の評価でもっと保留になっています
それはまだ新しいシステムであり、ラフなエッジ、悪いエラーメッセージ、そしておそらく多くのキャッチされていないバグがあります。これらのいずれかが見つかった場合はお知らせください。修正いたします。
そして私は安定した解決策を探しています。もう1つは、優れたJavaサポートが必要なことです。Erlangで書かれたcloudDBには、いくつかのクライアントライブラリがあり、ektorpが最良の選択のようです。ここでの問題は、どういうわけか、ektorpがそれほど頻繁に使用されていないように見えることです。私がダウンロードセクションを調べると、約があります。400ダウンロード。OK、ほとんどの人はMaven依存関係を介してそれを使用しますが、それでも400は私を驚かせました。couchDB Javaライブラリに関する古いStackoverflowの質問がありますが、これはektorpも推奨します。今より良い解決策はありますか?
現時点では、Cassandraは私にとって最も安定して成長している選択肢のように見えますが、cloudDBはとても簡単できれいに感じますが、それにアクセスするためのJavaツールがないのでしょうか、それともcloudDBにアクセスするための独自のクライアントを作成するのが理にかなっていますか?
hash - ヴォルデモートでは、なぜハッシュリングは2 ^ 31-1までしか拡張されないのですか?
プロジェクトのヴォルデモートのデザインページ:
http://project-voldemort.com/design.php
ハッシュリングは区間[0、2^31-1]をカバーすると述べられています。
ここで、間隔[0、2^31-1]は2^31の総数を表し、最大数の2 ^ 31-1はすべて1に設定された31ビットです(これを納得させるために、2 ^3-を検討してください)。 1. 2 ^ 3=8で0x1000です。2^3-1= 7で0x111です)。
したがって、通常の32ビットアドレスワードを使用して値を格納する場合、1ビットの空き容量があります。
では、なぜ2 ^ 31-1が上限なのですか?その余分なビットは、ある種のシステム簿記に使用されていますか?
(たとえば、1ビット余分に1ビット追加すると、オーバーフローすることなく2つの有効なハッシュアドレスを安全に追加するためのスペースが提供されます)。
そして最後に、この選択はヴォルデモートに固有のものですか、それとも他のコンシステントハッシュスキームで見られますか?
python - ヴォルデモート Python クライアントの問題
Voldemort を使用してセットアップした複数のサーバーに Python クライアントを接続する際に問題が発生しています。Python 2.6.1 と Voldemort 0.81 を使用しています。具体的には、2 ノード クラスタを使用している場合、最初のサーバーへの接続には問題がないように見えますが、2 番目のサーバーへの接続には大きな問題が発生する可能性があります。これが私が使用している構成設定です(これが問題の原因となっている場合に備えて):
また、値がjsonでエンコードされ、永続性がメモリ内にあるだけでこの問題が発生したため、問題がそこにあるとは思いません。2 台のマシンが同じラックにあり (それらの間の通信は些細なことです)、別のラックにある (それでも非常に高速である必要がありますが、直接接続されていません) でこれを試しました。Pythonで取得しているものは次のとおりです。
サーバー「0」が実行されているマシン上にいる場合と、サーバー「1」が実行されているマシン上にいる場合、これと同じ結果になります。1つのクライアントalaから両方のサーバーに接続しようとしました:
これはときどき機能しますが (ただし、テストの途中で失敗する可能性があります)、「WARNING:root:Metadata bootstrap from 1:6666 failed: Invalid Argument」のような警告で失敗し、クライアント オブジェクトが返されます。
この問題を解決する方法について何か提案はありますか? 私は一般的に、私が見た単一ノード クラスタのパフォーマンスが気に入っており、複数のノードに拡張したいと考えています。
java - ヴォルデモートストアからすべてのキーと値のペアを一度に取得するにはどうすればよいですか?
次に、ストアからすべてのキーと値のペアを一度に取得するにはどうすればよいですか?
replication - Voldemort のレプリケーションとフェイルオーバーの詳細
私は Voldemort を評価していて、レプリケーションとフェイルオーバーに関連するいくつかの紛らわしいものに遭遇しました。各ノードが別のノードのバックアップである単純な 2 ノード クラスター構成を作成しようとしました。そのため、ノード 1 に書き込まれたデータはノード 2 にレプリケートする必要があり、その逆も同様です。ノード 1 のフェイルオーバーの場合、2 番目のノードがクライアントの要求を処理する必要があります。ノード 1 の復元後、データはノード 1 に転送されます。これは非常に一般的で明確なケースだと思います。というわけで以下の構成にしました。
次のテストを実行します。
- 両方のノードを開始します。
- 「bin/voldemort-shell.sh perftest tcp://10.50.3.156:6666」を使用して、シェル経由でクラスターに接続します。
- Key-Value「1」「a」を入力します。
- 「ノード 1」「ノード 0」を返す「preflist "1"」を実行するので、「get」リクエストが最初にノード 1 に送信されると想定します。
- ノード 1 をクラッシュさせます。
- キー「1」を取得します。接続の切断に関連するエラーがいくつか表示されますが、最終的には正しい値が返されます。
- ノード 1 を開始します。
- キー「1」を取得します。ノード 1 が使用可能であると表示されますが、値の代わりに「null」が返されます。したがって、ノード 1 はノード 0 からデータを取得していないと仮定します。required-reads = 1 であるため、ノード 0 を要求せず、null を返します。
- ノード 0 をクラッシュさせます。
- キー「1」は、ノード1に複製されなかったため、永久に失われます。
構成またはクラスター複製の詳細で何かを誤解していると確信しています。復旧後にデータがノード 0 からノード 1 に複製されない理由を明確にしていただけますか? そして、レプリケーションはサーバーではなくクライアントの責任であるというのは正しいですか? その場合、ノードの復旧後にデータをどのようにレプリケートする必要がありますか?
前もって感謝します。
dictionary - キー/値ストレージのキーを設計/作成する方法は?
シリアル化されたオブジェクト (または何でも) をキー/値キャッシュに格納したいと考えています。
今、私はこのようなことをします:
むずかしいと思います。どのようにキーを設計できますか?
mongodb - CASをサポートするCAKeyValueストレージを探しています
一貫性、可用性、比較と設定をサポートする永続的なKeyValueストレージを探しています。
これは3つのノードにデプロイされ、1つ(いずれか)のノードがダウンしたときに操作可能である必要があります。クラスタ全体がオフラインになり(たとえば、電源の問題が原因で)、その後オンラインに戻った場合でも、データが失われることはありません。また、2つのノードがダウンしていない限り、システムがシステム管理者に迷惑をかけないことを期待しています。当然のことながら、可能な限り高速であることが望ましい。そして、最も重要な機能は一貫性です。何かが保存されたと報告された場合、障害が原因で失われることはありません。
まれな状況では手動による介入が必要であるというMongoDBのドキュメントを調べましたが、これはオプションではありません。
私が調べたもう1つのシステムは、ヴォルデモートでした。次の設定で要件を満たしていると思います。
ただし、レプリケーションと整合性に関する包括的なドキュメントが提供されていないため、仮定を確認できません。
私の要件に合ったストレージの経験はありますか?何かお勧めしてもらえますか?
PS私は大量の情報を保存するつもりはないので、シャーディングは省略できます。
java - JUnit内からVoldemort Serverを使用するには?
Maven プロジェクトで JUnit 内から Voldemort を使用しようとしています。次のコードはコンパイルされますが、正常に実行されません。
代わりに、次の例外がスローされます。
これを修正する方法はありますか?
java - ヴォルデモート アプリケーションの実行
Voldemort を使用する Java アプリケーションを実行できませんでした。Voldemort のダウンロードで見つかる Client Example を実行しようとしています。
次のようにコードをコンパイルしました。javac -classpath voldemort-0.96.jar ClientExample.java
エラーは表示されませんでした。しかし、次のようにコードを実行しようとすると:java -classpath voldemort-0.96.jar ClientExample
次のエラー メッセージが表示されます。
何が間違っているのかわかりません。voldemort jar は同じフォルダーにあります。
編集:ここにClientExampleコードがあります
memcached - 適切なKeyValueストアの決定:Voldemort vs Cassandra vs Memcached vs Redis
私は自分のプロジェクトの1つ(ヘルスケア用のセマンティック検索エンジン)にトリプルストアデータベースを使用していますが、それはかなりうまく機能します。トリプルストアの上にキーバリューストアのレイヤーを使用することで、パフォーマンスを向上させることを検討しています。ディープセマンティック処理を行うため、トリプルストアクエリは遅くなります。
これが私がパフォーマンスを改善することを計画している方法です:
1)トリプルストアにクエリを実行して、すべてのクエリ用語に対してHadoopジョブを毎日実行します。2)これらの結果をキャッシュすると、クラスター内にキー値が格納されます。3)ユーザーがクエリ用語を検索する場合、トリプルストアを検索する代わりに、キー値ストアが最初に検索されます。トリプルストアは、クエリ用語がキー値ストアに見つからない場合にのみ検索されます。
保存する予定のキーと値のペアは、「文字列」から「POJOマッピングのリスト」です。BLOBとして保存できます。
どのKeyValueストアを使用するかについて混乱しています。私は主にフェイルオーバーと負荷分散のサポートを探しています。必要なのは、上記の機能を提供する単純なKeyValueStoreだけです。値やその他の機能内で並べ替え/検索する必要はありません。
私が間違っている場合は訂正してください。memcachedとRedisはメモリ内にあるため、より高速になると想定しています。しかし、Redis(Jredis)またはmemchaced(Spymemcached)のJavaクライアントがフェイルオーバーをサポートしているかどうかはわかりません。メモリと永続ストレージのどちらを使用するかわかりません。Voldemort、Cassandra、HBaseも検討しています。全体的なキー値は、約2GBから4GBのサイズになります。これに関するポインタは本当に役に立ちます。
私はnosqlとKeyValueストアに非常に慣れていません。詳細が必要な場合はお知らせください。