【问题标题】:How does Apache Cassandra perform on a single read of millions of records?Apache Cassandra 如何在单次读取数百万条记录时执行?
【发布时间】:2022-02-14 00:55:14
【问题描述】:

关于 Cassandra 的冗余如何为来自不同位置的数千个传入请求提供良好性能的文章已经很多,但我没有发现任何关于单个大请求的吞吐量的信息。这就是这个问题的意义所在。

我正在评估 Apache Cassandra 作为以下问题的数据库解决方案的潜力:

客户端将是一个单服务器应用程序,具有对 Cassandra 数据库的独占访问权限,位于同一个数据中心。 Cassandra 实例可能有几个节点,但可能不超过 5 个。

当某个功能在应用程序上运行(偶​​尔由人触发)时,它将在 Cassandra 中填充多达 500 万条代表浮点数据短数组的记录,并删除这些记录。记录不会被更新,我们永远不需要访问数组的单个元素。数组可以有不同的长度,但通常有大约 100 个元素,每行可能代表 0-20 个数组。

例如:

id   array1                  array2
123  [1.0, 2.5, ..., 10.8]   [0.0, 0.5, ..., 1.0]

额外问题:我应该使用 list 的双精度来表示这个,还是应该将数组序列化为 Json?

在某些时候,用户请求报告,服务器应该读取所​​有 5M 记录,解释数组,进行一些聚合,并在屏幕上绘制一些数据。读取操作可能需要

【问题讨论】:

  • 它的表现会很糟糕。这对 Cassandra 来说不是一个好的用例。
  • 正如 Aaron 提到的,这对于 Cassandra 来说不是一个好的用例,我会在基于文档的 NoSQL(如 Mongo 或 Couchbase)上对其进行测试。对于报告部分,您还可以考虑具有 MPP 引擎的 Couchbase Analytics 服务器。选择面向文档的 NoSQL 的另一个原因是,如果需要,您可以索引数组。虽然这需要仔细设计数据建模
  • @Aaron 不久前,您回答了一个关于使用异步“未来”分别查询不同分区的问题。这是否适用于这里(如果有人坚持围绕此构建一个系统)? stackoverflow.com/questions/36690811/…
  • 所以我已经考虑了一段时间了。你知道,如果你能找到大量线程并发处理(不会压倒 Cassandra,但不会永远占用),那可能没问题。当然值得一试。

标签: cassandra nosql


【解决方案1】:

让我从您的第二个用例开始,由于您的数据分布在节点上,如果您有一个范围广泛的查询而没有缩小分区,那么 Cassandra 的执行速度会很慢。

Cassandra 非常适合查询和搜索,如果 你知道分区键。

  • 即使您有 500 万条记录,假设这些记录分散在各处 5 个不同的节点,对于您的报告用例,Cassandra 必须使用 通过所有节点并聚合它。最终它会超时。

  • 这个特定用例在 Cassandra 中不可行,但如果可以的话
    在您的服务中聚合并多次调用分区和
    桶。它将执行得非常快。

    一般来说,访问模式很重要,Read 胜出。数据可以 以任何形式格式化,但明智地阅读它对 Cassandra 来说很重要。 所以回答了你的第二部分。谢谢。

【讨论】:

  • 我不确定你的意思。您是否建议为了更快地查询客户端/服务应该知道分区键(在我的示例中为 id)映射到哪些节点,以便我可以在服务中预分区我的查询?我可以将其视为现有系统的一种解决方法,但我不会围绕它进行设计。我什至看不到如何在 Datastax 的 C# API 中做到这一点。
猜你喜欢
  • 2017-01-24
  • 2016-08-22
  • 1970-01-01
  • 2011-08-11
  • 2021-03-15
  • 1970-01-01
  • 1970-01-01
  • 2015-12-14
  • 1970-01-01
相关资源
最近更新 更多