Permalink
Cannot retrieve contributors at this time
// User credentials, keyed by email address so we can authenticate | |
CREATE TABLE IF NOT EXISTS user_credentials ( | |
email text, | |
password text, | |
userid uuid, | |
PRIMARY KEY (email) | |
); | |
// Users keyed by id | |
CREATE TABLE IF NOT EXISTS users ( | |
userid uuid, | |
firstname text, | |
lastname text, | |
email text, | |
created_date timestamp, | |
PRIMARY KEY (userid) | |
); | |
// Videos by id | |
CREATE TABLE IF NOT EXISTS videos ( | |
videoid uuid, | |
userid uuid, | |
name text, | |
description text, | |
location text, | |
location_type int, | |
preview_image_location text, | |
tags set<text>, | |
added_date timestamp, | |
PRIMARY KEY (videoid) | |
); | |
// One-to-many from user point of view (lookup table) | |
CREATE TABLE IF NOT EXISTS user_videos ( | |
userid uuid, | |
added_date timestamp, | |
videoid uuid, | |
name text, | |
preview_image_location text, | |
PRIMARY KEY (userid, added_date, videoid) | |
) WITH CLUSTERING ORDER BY (added_date DESC, videoid ASC); | |
// Track latest videos, grouped by day (if we ever develop a bad hotspot from the daily grouping here, we could mitigate by | |
// splitting the row using an arbitrary group number, making the partition key (yyyymmdd, group_number)) | |
CREATE TABLE IF NOT EXISTS latest_videos ( | |
yyyymmdd text, | |
added_date timestamp, | |
videoid uuid, | |
userid uuid, | |
name text, | |
preview_image_location text, | |
PRIMARY KEY (yyyymmdd, added_date, videoid) | |
) WITH CLUSTERING ORDER BY (added_date DESC, videoid ASC); | |
// Video ratings (counter table) | |
CREATE TABLE IF NOT EXISTS video_ratings ( | |
videoid uuid, | |
rating_counter counter, | |
rating_total counter, | |
PRIMARY KEY (videoid) | |
); | |
// Video ratings by user (to try and mitigate voting multiple times) | |
CREATE TABLE IF NOT EXISTS video_ratings_by_user ( | |
videoid uuid, | |
userid uuid, | |
rating int, | |
PRIMARY KEY (videoid, userid) | |
); | |
// Records the number of views/playbacks of a video | |
CREATE TABLE IF NOT EXISTS video_playback_stats ( | |
videoid uuid, | |
views counter, | |
PRIMARY KEY (videoid) | |
); | |
// Recommendations by user (powered by Spark), with the newest videos added to the site always first | |
CREATE TABLE IF NOT EXISTS video_recommendations ( | |
userid uuid, | |
added_date timestamp, | |
videoid uuid, | |
rating float, | |
authorid uuid, | |
name text, | |
preview_image_location text, | |
PRIMARY KEY(userid, added_date, videoid) | |
) WITH CLUSTERING ORDER BY (added_date DESC, videoid ASC); | |
// Recommendations by video (powered by Spark) | |
CREATE TABLE IF NOT EXISTS video_recommendations_by_video ( | |
videoid uuid, | |
userid uuid, | |
rating float, | |
added_date timestamp STATIC, | |
authorid uuid STATIC, | |
name text STATIC, | |
preview_image_location text STATIC, | |
PRIMARY KEY(videoid, userid) | |
); | |
// Index for tag keywords | |
CREATE TABLE IF NOT EXISTS videos_by_tag ( | |
tag text, | |
videoid uuid, | |
added_date timestamp, | |
userid uuid, | |
name text, | |
preview_image_location text, | |
tagged_date timestamp, | |
PRIMARY KEY (tag, videoid) | |
); | |
// Index for tags by first letter in the tag | |
CREATE TABLE IF NOT EXISTS tags_by_letter ( | |
first_letter text, | |
tag text, | |
PRIMARY KEY (first_letter, tag) | |
); | |
// Comments for a given video | |
CREATE TABLE IF NOT EXISTS comments_by_video ( | |
videoid uuid, | |
commentid timeuuid, | |
userid uuid, | |
comment text, | |
PRIMARY KEY (videoid, commentid) | |
) WITH CLUSTERING ORDER BY (commentid DESC); | |
// Comments for a given user | |
CREATE TABLE IF NOT EXISTS comments_by_user ( | |
userid uuid, | |
commentid timeuuid, | |
videoid uuid, | |
comment text, | |
PRIMARY KEY (userid, commentid) | |
) WITH CLUSTERING ORDER BY (commentid DESC); |