1

ログデータを含むバケット b1 があります。現在、追加のセカンダリ インデックスを追加して、それらを新しいバケットにコピーしようとしています。古いバケットでは、各エントリに 60 ブロックの JSON があります。各ブロックを新しいバケットに新しいエントリとして書き込む必要があります。

私は riak Java クライアントを使用し、古いバケットから各エントリを読み取り、JSON を解析し、secIndex を追加して新しいバケットに 60 回の書き込み呼び出し [json 内のブロックごとに 1 回] を行いました。これはうまくいきました。しかし、プロセス全体は非常に遅く、私の古いバケットにはほぼ 1,000 万のエントリがあります。

これを行うためのより効率的な方法はありますか

4

1 に答える 1

2

速度を上げる可能性がある (ただし、クラスターに多くの負荷がかかる) 方法の 1 つは、1 つまたは 2 つのカスタム map および/または reduce フェーズ関数を開発し、分割と挿入を 1 つの大きな mapreduce ジョブの一部として実行することです。キーフィルタリングなどを使用して、これをいくつかの小さなタスクに分割することができます。

新しいレコードを挿入するには、内部の Riak クライアントにアクセスする必要があるため、これらの関数 (少なくとも挿入関数) は Erlang で開発する必要があります。現在、JavaScript から挿入を実行することはできないためです。

これは開発とテストに時間がかかるため、これが 1 回限りのアクティビティ (と思われる) である場合は、その価値がない可能性があります。

まだ行っていない場合は、データを分割して、複数の並列ストリームで移行を実行することをお勧めします。

于 2012-10-24T18:54:00.430 に答える