2017-03-25 1 views
0

Wir sind (potentiell) zu modellieren, eine Tabelle mit drei Feldernkorrekte Art und Weise meine Analysen in Cassandra (Video Views)

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) 

meine Frage haben, gehen wird, wäre es besser, diese zu speichern, wie jede Ansicht eines einzelner Datensatz oder sollte ich jede Ansicht in einer Sammlung innerhalb eines Datensatzes mit einer Video-ID speichern.

Einige der Videos bekommen 500k + Aufrufe - viele bekommen 5-10k pro Tag.

Die Abfragen müssen wir führen, sind in laymans Begriffe

// Heres a video ID, where is it popular 
// Heres a video ID, get all views 
// Get all videos where local is some local 

Antwort

0

Sammlung für kleine Menge von Daten verwendet werden.
Kollektion Limitierung:

  • Collection (Liste): Sammelgröße: 2B (2^31); Werte Größe: 65535 (2^16-1) (Cassandra 2.1 und höher, unter Verwendung des nativen Protokolls v3)

  • Sammlung (Set): Sammlungsgröße: 2B (2^31); Werte Größe: 65535 (2^16-1) (Cassandra 2.1 und höher, unter Verwendung des nativen Protokolls v3)

  • Sammlung (Karte): Sammlungsgröße: 2B (2^31); Anzahl der Schlüssel: 65535 (2^16-1); Werte Größe: 65535 (2^16-1) (Cassandra 2.1 und höher, mit nativen Protokoll v3)

Und auch Sie können nicht Seite durch Auflistelement.

Quelle: https://docs.datastax.com/en/cql/3.1/cql/cql_reference/refLimits.html

Es ist besser, jede Ansicht als einzelne Aufzeichnung speichern wie:

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) 
); 

So alle Ansichten eines Videos zu bekommen:

SELECT * FROM views WHERE video_id = ? 

Und das alles zu bekommen Video von einem Ort:

SELECT * FROM videobylocal WHERE local = ? 

Um ein beliebtes Video zu erhalten, musst du Spark/Hadoop verwenden oder ein eigenes Programm schreiben, um die Popularität zu berechnen.

+0

Der Autor fragt nach 500k + Views für ein Video, das die 2-Milliarden-Limitierung in absehbarer Zeit nicht zu treffen scheint, oder? Auch wenn der Autor nur Videos für einen Ort (nicht Ansichten) benötigt, scheint ein Index auf 'Ansichten (lokale)' ein wenig verschwenderisch – starikoff

+0

@starikoff Lassen Sie uns sagen, Video-Ansicht nicht 2B schlagen, traf es 500k Und Sie wollen Um alle Blicke auf dieses Video zu bekommen, ist es sinnvoll, 500k zu wählen, Artikel in einem einzigen auswählen? Und meine Antwort aktualisiert –

+0

Ich stimme mit dem Paging-Argument überein, es ist nur so, dass der gesamte Einschränkungsteil in diesem Fall irrelevant zu sein scheint; BTW und nicht wirklich verwandt, in 3.1 wurde die 64 KB-Beschränkung auf Collection Element Größen in [CASSANDRA-10374] entfernt (https://issues.apache.org/jira/browse/CASSANDRA-10374) – starikoff

Verwandte Themen