2015-11-02 55 views
1

我正在学习Cassandra作为我为其中一个涉及大数据的项目之一的SQL数据库的替代方法。在单个请求中查询Cassandra上的拆分分区

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

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

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

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

视频课程介绍了如何引入额外的分区键以便按目的拆分分区或减小每个分区的大小要求。 视频指出使用基于时间的密钥或任意“桶”密钥,该密钥在达到可管理行数时递增。考虑到这一点,这导致我遇到以下问题:鉴于分区键仅用作相等条件(即指向分区以查找记录),我如何查找所有最终存在的记录分散在多个分区而不必指定存储桶或时间戳密钥?

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

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

任何帮助将不胜感激。

谢谢。

回答

1

基本上这可以归结为为您的数据选择正确的分辨率。我想说的第一步是确定哪些数据最适合您。为了举例,我们将1小时视为好事,问题是如何获取特定日期的所有记录。

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

其他想法可以有一个表作为简单的查找表,其中包含具有该日期的财务数据的分区键的日期和值的键。当你阅读时,你首先需要查找表来获取密钥,然后到具有结果的分区。您还可以存储每个分区键值的计数器,以便知道预期的数据量。

总而言之,这是最好弄清楚你的数据设置一些自然的水桶,把它添加到日期(组织,邮政编码等),你可以使用技巧及附加的查询表。这种方法可以用于你提到的符号。您可以使用符号作为分区键,将每个日期的聚类和分区的值以该日期的结果作为值。比你查询的29-10-2015符号#,你看到分区ADZ有结果,所以你去这些分区,并从他们那里得到的财务数据,并一起把它粘在应用水平。