Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra 卡桑德拉:在使用TWCS时,是否仍然需要手动扣扣?_Cassandra_Partitioning - Fatal编程技术网

Cassandra 卡桑德拉:在使用TWCS时,是否仍然需要手动扣扣?

Cassandra 卡桑德拉:在使用TWCS时,是否仍然需要手动扣扣?,cassandra,partitioning,Cassandra,Partitioning,我正要开始探索Cassandra(长期)保存时间序列(只写一次)数据,这可能会变得相当大 假设可能是最简单的时间序列: CREATE TABLE raw_data ( sensor uuid, timestamp timestamp, value int, primary key(sensor, timestamp) ) WITH CLUSTERING ORDER BY (timestamp DESC) 为了确保分区不会增长太多,互联网上的许多帖子都建议使用bu

我正要开始探索Cassandra(长期)保存时间序列(只写一次)数据,这可能会变得相当大

假设可能是最简单的时间序列:

CREATE TABLE raw_data (
    sensor uuid,
    timestamp timestamp,
    value int,
    primary key(sensor, timestamp)
) WITH CLUSTERING ORDER BY (timestamp DESC)
为了确保分区不会增长太多,互联网上的许多帖子都建议使用bucketing,例如介绍day或只是一个向上计数的bucket数字,如

primary key((sensor, day, bucket), timestamp)
。然而,这些策略需要手动管理,这似乎相当麻烦,尤其是对于未知数量的桶

但是,如果我说添加:

  AND compaction = {
     'class': 'TimeWindowCompactionStrategy', 
     'compaction_window_size': 1, 
     'compaction_window_unit': 'DAYS'
  };
如前所述,例如:

TWCS旨在通过创建时间窗口的SSTABLE存储桶来简化DTC,这些SSTABLE存储桶使用大小分层压缩策略相互压缩


据我所知,这意味着Cassandra在内部使用TWCS时无论如何都会创建只读存储桶。因此,我想知道是否仍然需要手动实现bucketing键
day

bucket的目的是阻止分区变得过大。如果没有bucket,分区的增长是无限的——也就是说,为特定传感器收集的数据越多,分区就越大,没有极限

仅更改压缩策略不会阻止分区的增长,因此您仍然需要存储桶

(您写了“Cassandra在内部使用TWCS时创建只读存储桶”。不要将其与“存储桶”列混淆。同一个词用于两个完全不同的事情。)


另一方面,如果要在数据上设置TTL,那么这将有效地限制分区的大小,因为比TTL旧的数据将(最终)从磁盘中删除。因此,如果TTL足够小,您将不再需要桶。在这个特定的场景中,按顺序收集时间序列数据和TTL,然后TWCS是最佳的压缩策略。

处理桶列真的不太麻烦。最大的不便是,如果您想查询所有存储桶中最早或最新的时间戳,您实际上无法做到这一点。对于所有其他查询,只需对每个bucket执行一个查询(可以并行运行)并将结果缝合在一起。在Python中,使用itertools.chain是非常简单的。从_iterable()嗯,如果我说定义的动态bucket(取决于大小),只是不知道insight值是多少呢?我想我必须将桶数存储在另一个表中,才能查询所有桶数?