- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我们有数千个传感器,可以生成我们想要存储在 Cassandra 中的测量时间序列数据。目前,我们每天存储约 5 亿条记录,下次该数量将增长 5-10 倍。
我们主要使用最新的测量数据。旧的测量数据几乎无法读取。
作为压缩策略,我们使用 DTCS。设置 ttl 不是一个选项,因为我们需要存储测量数据以用于存档目的。
我还不知道如何处理“旧数据几乎冷了”的事实。
更新:我想要避免的:我的 Cassandra 集群中有 20 TB,其中 18 TB 被使用,假设每年只使用一次(如果有的话)。我不想为不需要的 18 TB 付费。设置 ttl 不是一个选项,因为我们应该能够读取数据,例如从 2013 年 3 月开始的数据(此类请求的额外成本是可以的)。如果我们将 ttl 设置为例如 6 个月,那么我们就无法正确执行此操作。
我们目前正在评估两种设计方案,并寻找最具成本效益的方案:
(在这两种情况下,每行最多有 500K 列,大部分小于 100K)
2.的缺点是我们将拥有<100个键空间而不是1个,并且读取数据时的复杂性增加。2. 的优点是我们可以每月对它们进行快照/备份/删除/恢复,据我了解,如果我们采用选项 1,则很难做到这一点。这样,我们就不必调整我们的规模Cassandra 集群可容纳 TB 级的冷数据。
我的问题:2.对于我们的用例来说是一个合理的选择,还是这被认为是 Cassandra 中的反模式?
感谢您的帮助!
最佳答案
通常,您不希望将旧的冷数据放在单独的键空间中,因为这将很难维护(正如您所提到的)。现在,由于您对数据的分区方式,您面临的挑战似乎是非常宽的行。相反,我建议您按月“存储”数据。这可以通过修改分区键来完成,如下所示:
PRIMARY KEY ((year,month,sensor_id), measurement_date)
额外的括号是用于声明多个列作为分区键的 CQL 语法。这意味着您始终必须提供年、月和sensor_id 才能从此表中读取。但请记住,在 Cassandra 中,主键(与关系数据库不同)定义了数据在集群中的分布方式。因此,我们所做的实际上是在其自己的行中将传感器数据逆向一年一个月。因此,我们基本上通过多个键空间实现了您的想法,但以一种对 Cassandra 和开发人员更加友好的方式。
要将数据插入到该表中将非常容易。假设measurement_date是一个timeuuid(应该是这样,否则你可能会覆盖数据)这里是你的代码将执行的一般流程:
然后执行 CQL 进行 INSERT:
插入 time_series (年、月、sensor_id、measurement_date) VALUES (2016,4,'sensor_id','在此处生成 timeuuid');
就像我在从表中读取数据之前提到的那样应该非常简单。如果您想要更多信息,我有一个与您的数据建模问题相关的更长的回复 here .
由于您每天要写入 500K 测量值,因此您将需要进一步存储这些数据(有关更多详细信息,请参阅上面的 SO 答案),因为通常当您的聚类列超过 10k 标记时,C* 开始表现不佳。
最后您可能想阅读Optimizing Cold SS Tables因为它提供了一些很好的信息。例如,您可以调整 Cold_reads_to_omit,这样您就不会浪费时间压缩非常冷的表。对于DTCS,您可以设置max_sstable_age_days来停止压缩特定年龄的SS表,以节省冷表上的IO。
更新:存储大小管理:如果您想继续只使用一张表来处理所有事情,则可以进行一些调整。首先确保表正在使用压缩(最好是 lz4),接下来您可以降低复制因子,这也可以节省空间。我想如果你对旧数据和新数据有不同的 key 空间,你可以为每个数据使用不同的 RF 以节省空间。
对于您推送并需要存档的数据量,我鼓励您研究时间序列数据库 (TSDB),例如 Graphite 和 InfluxDB。对于您的目标和挑战,TSDB 比使用 Cassandra 处理时间序列数据更容易使用和执行。
关于cassandra - Cassandra 中的时间序列数据,每个月的键空间而不是一个键空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36545345/
我们有 2 个 cassandra 集群,第一个有旧数据,第二个有新数据。 现在我们想要将旧数据从第一个集群移动或复制到第二个集群。什么是最好的方法来做到这一点以及如何做到这一点? 我们正在使用 DS
我正在考虑安装 OpsCenter 来监控我们在 RackSpace VM 上运行的 24 节点 Cassandra 集群。过去我听说 OpsCenter 减慢了集群速度。我有点担心 OpsCente
假设我有一个复制因子(RF)= 2 的 2 节点集群。 我使用一致性 2 触发插入。当客户端等待响应时,Cassandra 开始写入这 2 个节点。中间一个节点失败,无法完成写入,而另一节点上的写入成
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足 Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以
我在 Cassandra 中有一个表,其中我用 1000 多个条目填充了一些行(每行有 10000 多列)。行中的条目更新非常频繁,基本上只是一个字段(它是一个整数)被更新为不同的值。列的所有其他值保
当Cassandra端有“掉落的突变”时,它是否向调用客户端返回相应的失败?或者即使在服务器端丢弃相应的突变并导致数据丢失,它总是成功响应调用事务的调用客户端? 在一个特定实例中,当我们的 TPS 约
我有一个 Multi-Tenancy 应用程序,其中 tenantId 将成为每个查询的一部分,因此我将其放入所有表的分区键中。 例子: CREATE TABLE users { tenantId t
根据 Datastax 文档,在 Cassandra 中先读后写是一种反模式。 每当我们在 CQLSH 中使用 UPDATE 或使用 Datastax 驱动程序来设置几列(带有 IF 和集合更新)时,
是否有命令或任何方式可以知道 Cassandra 的哪些节点上存储了哪些数据? 我对 Cassandra 很陌生,在谷歌上搜索这个问题并没有多少运气。 谢谢! 最佳答案 您可以使用 nodetool
我们有一个包含 1500 万条记录的表,而我们的表是一个 10 节点的 cassandra 集群。我们有一列有接近 20 个可重复值。是否建议在此列上建立二级索引? 最佳答案 假设在该列上完全均匀分布
Cassandra 发布了它的 technical limitations但没有提到允许的最大列数。是否有最大列数?我需要存储 400 多个字段。这在 Cassandra 中可能吗? 最佳答案 每行的
我想知道当表中有多个非 PK 列时会发生什么。我读过这个例子: http://johnsanda.blogspot.co.uk/2012/10/why-i-am-ready-to-move-to-cq
我有两个关于 Cassandra 查询结果的问题。 当我在 Cassandra 中对表进行“完全”选择(即 select * from table )时,是否保证结果将按分区标记的递增顺序返回? 例如
我无法为 Cassandra 设置 Hector。我已经浏览了 documentation和 Cassandra wiki .这些文档的问题在于,那里的很多信息都已经过时或过时(或者我缺乏知识)。无论
我正在使用 DataStax Enterprise 中 cassandra 中提供的压力测试。如果有人知道的话,我也想要一些关于它和 cassandra 的信息。 - 首先,压力测试使用哪些节点?我的
当我在 CQL 中创建表时,列的顺序是否必须精确 不是 在主键和 中不是 聚类列: CREATE TABLE user ( a ascii, b ascii, c ascii,
我有一张如下表: CREATE TABLE tab( categoryid text, id text, name text, author text, des
我正在尝试学习 Cassandra,但对术语感到困惑。 很多情况下它表示该行存储键/值对。 但是,当我定义一个表时,它更像是声明一个 SQL 表,即;您创建一个表并指定列名和数据类型。 谁能澄清一下?
如何对 cassandra 数据实现审计? 我正在寻找一个开源选项。 cassandra 是否有任何有助于审计的功能? 我可以使用触发器将记录记录到表中吗?我关注了 Triggers示例并且能够将记录
我遇到了一个问题“me.prettyprint.hector.api.exceptions.HUnavailableException:: 可能没有足够的副本来处理一致性级别。”当我有 RF=1 时,
我是一名优秀的程序员,十分优秀!