3

cassandra に約 5,000 万行 (それぞれ ~ 30 列) を挿入したいのですが、現在ノードは 1 つしかありません。

別のデータ ソースからデータをクエリして、テーブル オブジェクトに格納しています。各行を個別に解析してから、それをミューテーターに追加します。現在、一度に 100 行を挿入していますが、100 万行を挿入するには 40 分かかります。このプロセスをスピードアップするにはどうすればよいですか? ( client.batch_mutate() も試しましたが、ブロックサイズ2の数千回の挿入後に接続エラーがリセットされたようです)。

調べてみると、マルチスレッドが役立つことがわかりました。しかし、私は例を見つけることができませんでした.誰かが私をリンクできますか? ありがとうございました !!

私の現在のコード:

        List<String> colNames = new ArrayList<String>();
        List<String> colValues = new ArrayList<String>();
        SomeTable result = Query(...); // this contains my result set of 1M rows initially

        for (Iterator itr = result.getRecordIterator(); itr.hasNext();) {
                String colName =.....
                String colValue = .....

            int colCount = colNames.size(); // 100 * 30

            for (int i = 0; i < colCount; i++) {
                //add row keys and columns to mutator 
                mutator.addInsertion(String.valueOf(rowCounter), "data", HFactory.createStringColumn(colNames.get(i), colValues.get(i)));
            }
            rowCounter++;

            //insert rows of block size 100
            if (rowCounter % 100==0) { 

                mutator.execute();
                //clear data
                colNames = new ArrayList<String>();
                colValues = new ArrayList<String>();
                mutator = HFactory.createMutator(keyspace, stringSerializer);
            }

        }
4

1 に答える 1