请耐心等待,以获取更长的问题描述。 我是Cassandra世界的新手,我正在尝试将当前产品从基于oracle的数据层迁移到Cassandra。
为了支持范围查询,我创建了如下所示的实体:
create table if not exists my_system.my_system_log_dated(
id uuid,
client_request_id text,
tenant_id text,
vertical_id text,
channel text,
event text,
event_type text,
created_date date,
primary key((created_date, tenant_id, vertical_id, channel, event),
event_type, client_request_id, id)
) with clustering order by (created_date desc);
现在,我遇到了一些文档/资源/博客,其中提到,为了保持最佳性能,我应该将分区大小保持在100 mb以下。对于某些分区键组合,我的系统每天要处理的流量非常大,因此无法使用上述分区键将其保持在100 mb以下。
为解决此问题,我引入了一个名为bucket_id的新因子,并正在考虑为其分配一天中的小时值,以将分区进一步分成较小的块并将其保持小于100 mb(即使这意味着我必须进行24次读取提供一天的交通详细信息,但我的阅读效率有些低下)。这是具有存储区ID的架构
create table if not exists my_system.my_system_log_dated(
id uuid,
client_request_id text,
tenant_id text,
vertical_id text,
channel text,
event text,
bucket_id int,
event_type text,
created_date date,
primary key((created_date, tenant_id, vertical_id, channel, event,
bucket_id), event_type, client_request_id, id)
) with clustering order by (created_date desc);
即使如此, 超过100 mb,而其他所有音量都在该范围内。
考虑到这种情况,我有以下问题:
以下是我认为可能有用的更多信息:
提前感谢您的输入!
答案 0 :(得分:1)
您使用存储桶ID的方法看起来不错。回答您的问题:
my_system.my_system_log_dated
中使用TWCS(时间窗口压缩策略)。请检查如何配置此压缩策略,因为您设置的时间窗口非常重要。答案 1 :(得分:0)
我能够进行设备存储桶化,以防止由于意外流量高峰而对群集健康造成的任何风险。 https://medium.com/walmartlabs/bucketisation-using-cassandra-for-time-series-data-scans-2865993f9c00
已在此处进行了描述