2016-03-29 3 views
0

Aerospikeが約70分で1000万のキー値を挿入しています。私は挿入する手順は、次のとおりです。Aerospikeが長すぎて1000万のキー値を挿入しない

  1. 私は

  2. レジスタ

  3. スタートJavaコードのため千万時間を反復して呼び出すエアロUDFエアロサーバー上のUDFエアロメモリ内のすべてのキー値を持っています各キーと値のモジュール。

  4. udfの内部に、キーが既に存在するかどうかを確認しています。はいの場合は、それ以外の場合は更新します。

  5. 私はレプリカ係数を持つ2エアロサーバーを持っている2.

は、書き込みパフォーマンスを向上させるか、一括書き込みを実行する方法はあります。私はaerospikeがバッチ書き込みをサポートしていないことを知っています。最適化された書き込み操作に対する提案。私は実行するために同期エアロスパイククライアントを使用する代わりに

private void put(String namespace, String setName, String binName, String keyVlaue, List<Integer> listIdsToBeAdd, List<Integer> listIdToBeRemoved) { 
    Key key = new Key(namespace, setName, keyVlaue); 
    getAerospikeClient().execute(writePolicy, key, "aerospike_udf", "update_record", Value.get(listIdsToBeAdd), Value.get(listIdToBeRemoved), Value.get(binName)); 
} 

UDFモジュール

function update_record(record, list1, list2, bin_name) 
    local store_list = record[bin_name] 
    -- get a list from database record. Create one if it doesn't exits 
    if store_list == nil then 
    store_list = map() 
    end 

    if list2 then 
    for i=1, #list2 do 
     map.remove(store_list, list2[i]) 
    end 
    end 

    if list1 then 
    for i=1, #list1 do 
     store_list[list1[i]] = 1 
    end 
    end 

    if map.size(store_list) == 0 then 
    record[bin_name] = nil 
    else 
    record[bin_name] = store_list 
    end 

    if not aerospike:exists(record) then 
    aerospike:create(record) 
    else 
    aerospike:update(record) 
    end 
end 
+0

これを再現する簡単な例を投稿できますか?あなたが間違っていることがあれば、それをコードで見ることができます。 –

+0

なぜ誰かがこれを投票しましたか?これは非常にシンプルで、繰り返し質問ですか、無関係か、その人でも解決策を知っていますか? – visingh

+1

@PeterLawrey質問を更新しました。 – visingh

答えて

1

を使用

コードは、私は非同期エアロスパイクのクライアントを使用して開始します。今私は〜2.6分以内に1000万レコードを挿入することができます。

関連する問題