1 つの riak バケットを [ストリーミングまたはスナップショットによって] ファイルにバックアップできるソリューションの推奨事項は何ですか?
3 に答える
1 つのバケットだけをバックアップすることは、Riak では困難な操作になります。
すべてのソリューションは、次の 2 つのステップに要約されます。
バケット内のすべてのオブジェクトを一覧表示します。Riak クラスターのどこにも「マニフェスト」またはバケットの内容のリストがないため、これは注意が必要な部分です。
上記のリストからそれらのオブジェクトのそれぞれに GET を発行し、それをバックアップ ファイルに書き込みます。この部分は一般的に簡単ですが、最大限のパフォーマンスを得るには、これらの GET をマルチスレッド方式で並列に発行し、何らかの接続プーリングを使用する必要があります。
すべてのオブジェクトをリストする限り、3 つの選択肢のいずれかがあります。
/buckets/bucket/keys?keys=stream
1 つは、HTTP (例: ) または Protocol Buffersを介してバケットで Streaming List Keys 操作を行うことです。http: //docs.basho.com/riak/latest/dev/references/http/list-keys/およびhttp: //docs.basho.com/riak/latest/dev/references/protocol-buffers/list-keys/詳細については。いかなる場合でも、非ストリーミングの通常の List Keys 操作を行うべきではありません。(クラスター全体がハングアップし、キーの数が十分に大きくなると、最終的にタイムアウトまたはクラッシュします)。
2 つは、セカンダリ インデックス (2i) クエリを発行して、そのオブジェクト リストを取得することです。議論と警告についてはhttp://docs.basho.com/riak/latest/dev/using/2i/を参照してください。
そして 3 つは、Riak Searchを使用していて、ページ分割された 1 つの検索クエリですべてのオブジェクトを取得できる場合です。(ただし、Riak Search のクエリ結果の上限は 10,000 件であるため、このアプローチは理想的とは言えません)。
単一のバケットをバックアップできるスタンドアロン アプリの例として、Riak Data Migratorをご覧ください。これは、ストリーミング リスト キー アプローチを効率的な並列 GET と組み合わせて使用する実験的な Java アプリです。
Basho 関数の contrib には、単一のバケットをバックアップするための erlang ソリューションがあります。これはカスタム関数ですが、うまくいくはずです。
私の知る限り、Riak で単一のバケットをバックアップする自動化されたソリューションはありません。riak-admin
単一の物理ノードをバックアップするには、コマンド ライン ツールを使用する必要があります。1 つのバケット内のすべてのキーを取得する何かを記述し、高速で安全でない (r = 1) 場合は、低い r 値を使用できます。
バケットは論理的な名前空間であり、すべてのキーは同じ bitcask 構造に格納されます。そのため、ノードを 1 つだけ取得する唯一の方法は、自分でストリーミングするツールを作成することです。