需要有关将数百万个时间序列数据有效插入Cassandra数据库的建议

时间:2016-04-27 11:35:16

标签: scala cassandra

我想使用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)
    }
  }

JIntJLongJDouble分别只是java.lang.Integerjava.lang.Longjava.lang.Double

当我为1000万个值运行此基准测试时,本地安装的单节点Cassandra需要大约两分钟。我的电脑配备了16 GiB的RAM和一个四核i7 CPU。我发现这很慢。这是Cassandra插件的正常性能吗?

我已经读过这些:

还有其他我可以查看的内容吗?

1 个答案:

答案 0 :(得分:4)

简单的数学:

1000万次插入/ 2分钟≈83333333333次插入/秒这对于一台机器来说非常棒,你有没有想过更快的东西?

顺便问一下,您的硬盘有哪些规格? SSD或旋转磁盘?

您应该知道,大量插入方案比I / O绑定更多的CPU绑定。尝试在具有8个物理内核的计算机上执行相同的测试(所以16个带有超线程的vcore)并比较结果。