我们(可能)会有一个包含3个字段的表
view_id string (uuid)
video_id uint (this is a mysql id we use to track what video was viewed)
local string (this is the location the video was viewed from)
我的问题是,将每个视图存储为单个记录会更好,或者我应该将每个视图存储在一个带有视频ID的记录中的集合中。
部分视频获得500k +视图 - 许多视频每天获得5-10k。
我们需要运行的查询是以非专业术语开发的
// Heres a video ID, where is it popular
// Heres a video ID, get all views
// Get all videos where local is some local
答案 0 :(得分:0)
收集用于少量数据 收集限制:
Collection(List):collection collection:2B(2 ^ 31);值大小:65535(2 ^ 16-1)(Cassandra 2.1及更高版本,使用本机协议v3)
Collection(Set):collection collection:2B(2 ^ 31);值大小:65535(2 ^ 16-1)(Cassandra 2.1及更高版本,使用本机协议v3)
收藏(地图):收藏规模:2B(2 ^ 31);键数:65535(2 ^ 16-1);值大小:65535(2 ^ 16-1)(Cassandra 2.1及更高版本,使用本机协议v3)
此外,您无法翻阅收藏品。
来源:https://docs.datastax.com/en/cql/3.1/cql/cql_reference/refLimits.html
最好将每个视图存储为单独的记录,如:
CREATE TABLE views (
video_id bigint,
view_id uuid,
local text,
PRIMARY KEY(video_id, view_id)
);
CREATE TABLE videobylocal (
local text,
video_id bigint,
PRIMARY KEY(local, video_id)
);
所以要获取视频的所有视图:
SELECT * FROM views WHERE video_id = ?
要从某个位置获取所有视频:
SELECT * FROM videobylocal WHERE local = ?
要获得热门视频,您必须使用Spark / Hadoop或编写自己的程序来计算受欢迎程度。