Cassandra 列和地图的最大尺寸最佳实践

问题描述 投票:0回答:1

我在 Cassandra 中对一些数据进行了建模,其中行具有一些具有数百个值的列表类型以及 Map,其中 UDT 类型具有大约 5 个字段,并且该映射也具有数百个键/值对。

该域在每个市场时段捕获股票的多个属性和其他内容,这种建模方法的替代方法将导致每天创建数千个分区,而不是地图中的唯一键,我试图找到答案,如果在具有上述大小的表中包含 Map 和 List 列是反模式,或者如果 Cassandra 从长远来看可以很好地处理这种情况。我不索引任何列表或映射键值,并且在这种方法中,表分区仅限于大约 100MB 的数据。

直接的问题,我希望有人能回答,如果这是一个重复的问题,我很抱歉没有在互联网或StackOverflow上看到任何知识

cassandra
1个回答
0
投票

我们的一般建议是将分区大小设为 100MB,您已将其记为数据模型中的上限。

100MB 大小不是硬性限制,而是推荐目标。在某些用例中,较大的分区大小可能是合适的,但这取决于许多移动因素,例如访问模式、峰值流量、堆配置等。

就我个人而言,我不鼓励尽可能使用 UDT 和集合,因为它们会增加很多复杂性。如果可能的话,尝试使用本机数据类型和常规列。话虽如此,当然有些情况下 UDT 和集合是合适的。但就您而言,从长远来看,将 UDT 嵌套在集合中会使它们变得极其复杂且难以管理(尽管并非不可能)。

需要注意的一些无关紧要的事情是 CQL

map
集合最多可以有 65,535 个键,并且
list
可以有 2B 个项目
。但同样,一旦您进入数千个项目,您可能会错误地对数据进行建模。

最后一句话,根据我的经验,大多数来自关系背景的工程师倾向于关注如何将数据映射到表,但在 Cassandra 中,重点应该放在应用程序如何查询数据,因为应用程序查询(而不是DB 查询)确定数据在磁盘上的布局方式。这可能不适用于您的情况,但我想我会提到它。干杯!

© www.soinside.com 2019 - 2024. All rights reserved.