【发布时间】: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,但不会永远占用),那可能没问题。当然值得一试。