我有一张table
CREATE TABLE user_songs (user_id int, song text, listen_date date, PRIMARY KEY (user_id, song))
并需要获得独特的歌曲听用户。但有些用户可以生成大分区(超过100.000或100 mb)。
如果在分区键中添加listen\u date(分割大分区),我将无法获得唯一的歌曲,需要在应用程序端使用额外的重复数据消除。它还使分页复杂化。
也许有更有效的解决办法?
我有一张table
CREATE TABLE user_songs (user_id int, song text, listen_date date, PRIMARY KEY (user_id, song))
并需要获得独特的歌曲听用户。但有些用户可以生成大分区(超过100.000或100 mb)。
如果在分区键中添加listen\u date(分割大分区),我将无法获得唯一的歌曲,需要在应用程序端使用额外的重复数据消除。它还使分页复杂化。
也许有更有效的解决办法?
2条答案
按热度按时间c6ubokkw1#
我会像这样为你的数据建模;
用户收听的歌曲
用户| id(分区键)|歌曲| id(集群键)|收听|日期
歌曲\按\用户
用户| id(分区|密钥)|宋| id(集群|密钥)
每当您将一个记录插入到“按用户收听的歌曲”表时,请在插入后执行这些操作
按用户查找歌曲;
如果有记录
是的,那就什么也不做
否,按用户向歌曲添加记录
如果要检索唯一的歌曲,请按用户id按用户表读取歌曲
数据的非规范化和复制是cassandra生活中的一个事实。别害怕。https://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling
mlmc2os52#
通过对部分分区键使用consistensy哈希,可以将大分区拆分为多个分区: