【发布时间】:2016-04-03 23:19:27
【问题描述】:
我需要在 3 个节点的 Cassandra(2.1.11) 集群中写入近 1000 万条记录,复制因子为 1 , 我的步骤几乎与datastax的Java驱动程序如下:
String insert_query = "insert into " + keyspace + "." + tblName
+ " (a, b, c, d,"
+ "e, f, g, h, i, j,"
+ "k, l, m, n) VALUES "
+ "(?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
List<ResultSetFuture> futures = new ArrayList<ResultSetFuture>();
PreparedStatement statement = session.prepare(insert_query);
BoundStatement bind = null;
int max = 5000000 or 6000000 or 7000000
for(int i = 0; i < max ; i++) {
bind = statement.bind(
id,
...
null,
null,
null
);
ResultSetFuture resultSetFuture = session.executeAsync(bind);
futures.add(resultSetFuture);
} //for
for(ResultSetFuture future : futures){
future.getUninterruptibly(15000, TimeUnit.MILLISECONDS);
}
然后,我的应用程序在 16 核的机器下运行,我监控进程的 CPU 消耗:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
25502 pengcz 20 0 30.8g 27g 19m S 1263.7 25.8 104:28.82 java
我发现cpu使用率太高(1263.7%),而且发现cpu使用率高持续时间更长,甚至写多条记录都写失败了。
不知道是不是我的错误步骤导致了这种情况?任何建议将不胜感激!
【问题讨论】:
标签: java cassandra datastax-java-driver