当前位置: 首页 > 知识库问答 >
问题:

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

郁鸿博
2023-03-14

我想使用Cassandra数据库来存储测试站点的时间序列数据。我正在使用“时间序列数据建模入门”教程中的模式2,但不是将日期存储为日期来限制行大小,而是将其存储为一个<code>int</code>,用于计算自1970年1月1日以来的天数,该值的时间戳是自纪元以来的纳秒数(我们的一些测量设备非常精确,需要精度)。我的值表如下所示:

CREATE TABLE values (channel_id INT, day INT, time BIGINT, value DOUBLE, PRIMARY KEY ((channel_id, day), time))

我创建了一个简单的基准,考虑到使用异步并为批量加载而不是批量准备语句:

  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)
    }
  }

< code>JInt 、< code>JLong和< code>JDouble分别是简单的< code>java.lang.Integer 、< code>java.lang.Long和< code>java.lang.Double。

当我对 1000 万个值运行此基准测试时,对于本地安装的单节点 Cassandra,这需要大约两分钟。我的电脑配备了16 GiB的内存和四核i7 CPU。我发现这很慢。这是卡桑德拉刀片的正常性能吗?

我已经读过这些:

  • 卡桑德拉的反模式
  • 关于写入性能的另一个问题

还有什么我可以查的吗?

共有1个答案

相弘和
2023-03-14

简单的数学:

1000万次插入/2分钟≈ 83 333,33333次插入/秒这对于单台机器来说是非常好的,您是否期望更快的速度?

顺便说一句,您的硬盘驱动器的规格是什么?固态硬盘还是旋转磁盘 ?

您应该知道大规模插入场景受CPU限制比受I/O限制更多。尝试在具有8个物理内核(因此使用超线程的16个vcore)的机器上执行相同的测试并比较结果。

 类似资料:
  • 我正在尝试使用使用密码摘要模式的 Web 服务,并且我的 Java 应用程序中有这些功能来生成随机随机数、创建日期和密码摘要。我无法克服身份验证失败错误,并且文档不太清楚他们是否需要 SHA-1 或 MD5,因为它顺便提到了两者。我尝试了MD5而不是SHA-1,我得到了相同的结果。我设法通过 SoapUI 上的测试使请求工作,但我不知道该应用程序如何生成摘要/随机数。任何帮助,不胜感激。 下面是我

  • 问题内容: 我已经读过很多关于这个的问题,但是我找不到足够快的问题。我认为有更好的方法将大量行插入MySQL数据库 我使用以下代码将100k插入到MySQL数据库中: 这需要100k行,大约需要40秒。我怎样才能使它更快或更有效? 通过DataTable / DataAdapter或一次插入多个行可能会更快: 由于安全问题,我无法将数据加载到文件中,无法将其MySQLBulkLoad加载。 问题答

  • 问题内容: 我需要使用JavaScript在网格中向用户呈现大量数据行(即数百万行)。 用户不应一次看到页面或仅查看有限数量的数据。 相反,应该看起来所有数据都可用。 并非一次下载所有数据,而是在用户访问时下载小块(即,通过滚动网格)。 这些行不会通过此前端进行编辑,因此可接受只读网格。 对于这种无缝分页,存在哪些用JavaScript编写的数据网格? 问题答案: 以获取有关使SlickGrid与

  • 我正在探索DataBricks Delta表及其时间旅行/时间特性。我有一些过去发生的事件数据。我正在尝试将它们插入delta表,并能够使用数据中的时间戳而不是实际的插入时间进行时间旅行。 我的事件中有一个日期/时间列。我将其重命名为“时间戳”,但它仍然不起作用。 我的 csv 数据如下所示:(数据显示 id=1000 的单个案例发生了 5 次更新) 我使用这些命令来创建增量表: 我有两个问题:

  • 我的组织有一个活动,我们有2016年、2017年、2018年的门票销售历史数据。该数据包含按日出售的门票数量,考虑到所有销售期间。 在2019年版的这场活动中,我被要求预测一天的门票销售数量,考虑到所有的销售期,这在某种程度上是为了指导我们度过这段时间,这意味着我们将掌握信息,如果我们高于或低于预期的销售平均水平。 问题是,历史数据以天为单位的销售期大小不同: