cassandra随机获取数据_Spark:不断读取Cassandra的数据

我同意Ralkie的观点,但是如果你在这个用例中与C *绑定,我想提出一个更多的解决方案 . 此解决方案假设您可以完全控制架构并进行摄取 . 这不是一个流媒体解决方案,虽然它可能会被笨拙地分成一个 .

您是否考虑过使用由timebucket和 murmur_hash_of_one_or_more_clustering_columns % some_int_designed_limit_row_width 组成的复合键?通过这种方式,您可以将时间设置为1分钟,5分钟,1小时等,具体取决于您需要分析/存档数据的方式 . 需要基于一个或多个聚类列的杂音散列来帮助定位C *集群中的数据(如果您经常查找特定的聚类列,这是一个非常糟糕的解决方案) .

例如,采用IoT用例,其中传感器每分钟报告一次,并且有一些传感器读数可以表示为整数 .

create table if not exists iottable {

timebucket bigint,

sensorbucket int,

sensorid varchar,

sensorvalue int,

primary key ((timebucket, sensorbucket), sensorid)

} with caching = 'none'

and compaction = { 'class': 'com.jeffjirsa.cassandra.db.compaction.TimeWindowedCompaction' };

注意TimeWindowedCompaction的使用 . 我不确定你使用的是什么版本的C *;但是对于2.x系列,我会远离DateTieredCompaction . 我不能说它在3.x中的表现如何 . 无论如何,您应该在确定架构和压缩策略之前进行广泛的测试和基准测试 .

另请注意,此架构可能会导致热点,因为它比其他传感器更容易报告 . 同样,不知道用例很难提供完美的解决方案 - 这只是一个例子 . 如果您不关心为特定传感器(或列)读取C *,则根本不必使用聚类列,您只需使用timeUUID或随机的杂音哈希桶 .

无论您如何决定对数据进行分区,这样的模式都允许您使用 repartitionByCassandraReplica 和 joinWithCassandraTable 来提取在给定的timebucket期间写入的数据 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值