在单个请求中查询Cassandra上的拆分分区

时间:2015-11-02 15:47:24

标签: cassandra

我正在学习Cassandra作为我正在为之工作的项目之一的SQL数据库的替代方案,这涉及大数据。

为了学习,我一直在观看DataStax提供的视频,更具体地说是DS220,它涵盖了Cassandra的建模数据。

在观看课程系列中的videos之一时,我了解了拆分分区以管理分区大小的概念。

我目前的理解是Cassandra每个分区的最大逻辑容量为2B条目,但每个分区最多建议一个100s MB。

我目前正在处理大量必须存储的实时财务数据(时间序列),这意味着我可以在一天内轻松填写GB数据。

视频课程讨论了引入额外的分区键,以便分割目的分区或减少每个分区要求的大小。 该视频指出使用基于时间的密钥或任意“桶”密钥,当达到可管理行的数量时,该密钥会增加。

考虑到这一点,这导致我出现以下问题:鉴于分区键仅用作相等标准(即指向分区以查找记录),如何找到最终传播的所有记录跨多个分区而不必指定存储桶或时间戳键?

例如,我可能会在一天内收到1M条记录,这可能超过100-500Mb分区限制,因此我无法按日期设置分区,这意味着我的每日数据将被分解为每小时分区,或者可选地分解为“分区”分区(用于平衡分区大小)。这意味着我的所有日​​常数据将分布在多个分区中。

鉴于这种情况,我如何查询特定日期的所有记录? (其他群集键可能包含我想要获得结果的符号,或者我想要该特定日期的所有记录)

非常感谢任何帮助。

谢谢。

1 个答案:

答案 0 :(得分:1)

基本上,这取决于为数据选择正确的分辨率。我想说的第一步是确定最适合您数据的内容。为了示例,让我们花费1小时作为一个好的东西,问题是如何获取特定日期的所有记录。

您的应用程序逻辑将稍微复杂一些,因为您可以简单地交易以分布式方式存储大量数据的能力。您需要获取所需的日期并在循环中发出24个查询并在应用程序级别粘贴数据。然而,当你粘合它可能是巨大的(我不知道你的演示或导出要求所以这可以拉1M到内存)。

其他想法可以是将一个表作为简单的查找表,其具有日期的键和具有该日期的财务数据的分区键的值。比你读的时候先去查找表来获取密钥,然后去分区有结果。您还可以存储每个分区键的值计数器,以便了解所需的数据量。

总而言之,最好在数据集中找出一些自然存储桶并将其添加到日期(组织,邮政编码等),您可以使用技巧和其他查找表。这种方法可用于您提到的符号。您可以将符号作为分区键,将每个日期的聚类和具有该日期结果的分区值作为值。比您在#上查询符号29-10-2015并且您看到分区ADZ有结果,因此您可以转到这些分区并从中获取财务数据它们在应用程序级别粘合在一起。