我想使用Cassandra数据库来存储测试站点的时间序列数据。我正在使用Pattern 2 from the "Getting started with Time Series Data Modeling" tutorial但是我没有存储日期以将行大小限制为日期,而是将int
存储为计算自1970-01-01以来经过的天数以及值的时间戳是自纪元以来的纳秒数(我们的一些测量设备精确且需要精度)。我的值表如下所示:
CREATE TABLE values (channel_id INT, day INT, time BIGINT, value DOUBLE, PRIMARY KEY ((channel_id, day), time))
我创建了一个简单的基准测试,考虑了using asynchronity and prepared statements for batch loading instead of batches:
def valueBenchmark(numVals: Int): Unit = {
val vs = session.prepare(
"insert into values (channel_id, day, time, " +
"value) values (?, ?, ?, ?)")
val currentFutures = mutable.MutableList[ResultSetFuture]()
for(i <- 0 until numVals) {
currentFutures += session.executeAsync(vs.bind(-1: JInt,
i / 100000: JInt, i.toLong: JLong, 0.0: JDouble))
if(currentFutures.length >= 10000) {
currentFutures.foreach(_.getUninterruptibly)
currentFutures.clear()
}
}
if(currentFutures.nonEmpty) {
currentFutures.foreach(_.getUninterruptibly)
}
}
JInt
,JLong
和JDouble
分别只是java.lang.Integer
,java.lang.Long
和java.lang.Double
。
当我为1000万个值运行此基准测试时,本地安装的单节点Cassandra需要大约两分钟。我的电脑配备了16 GiB的RAM和一个四核i7 CPU。我发现这很慢。这是Cassandra插件的正常性能吗?
我已经读过这些:
还有其他我可以查看的内容吗?
答案 0 :(得分:4)
简单的数学:
1000万次插入/ 2分钟≈83333333333次插入/秒这对于一台机器来说非常棒,你有没有想过更快的东西?
顺便问一下,您的硬盘有哪些规格? SSD或旋转磁盘?
您应该知道,大量插入方案比I / O绑定更多的CPU绑定。尝试在具有8个物理内核的计算机上执行相同的测试(所以16个带有超线程的vcore)并比较结果。