Cassandra-Tabellenstrukturvorschlag und Art der Abfrage
-
26-12-2019 - |
Frage
Ich versuche eine folgende Hierarchie zu erstellen:Benutzerkennung als Zeilenschlüssel, Stündliche Zeitreihen als Spalten und in jeder stündlichen Spalte möchte ich eine haben benutzerspezifische Informationen wie stündliche Aktivität.
{
UserId:long
{
Timestamp:datetime{
pageview: integer,
clicks:integer
}
}
Ich habe gelesen, dass es möglich ist, es zu erreichen mit supercolumns
aber gleichzeitig wurde erwähnt, dass supercolumns
sind im Moment veraltet.Wenn es wahr ist, welche Alternativen kann ich verwenden?
Könnten Sie mir bitte ein CQL / Java-Sparsamkeitsbeispiel geben, wie ich eine solche Struktur in Cassandra erstellen und einfügen soll?
Danke!
Lösung
Sie können dafür einen zusammengesetzten Primärschlüssel verwenden.Ich füge eine CQL-Abfrage zur Tabellenerstellung für die Tabelle hinzu.Und Sie können die Zählerspalte für Klicks verwenden.
CREATE TABLE user_click_by_hour(
userid long,
time_stamp timestamp,
clicks int,
pageview int,
PRIMARY KEY(userid,time_stamp)
)
Andere Tipps
Wenn Ihre Informationen einem bestimmten Zweck unterliegen, werden sie gemeinsam verwendet und abgerufen .Wenn Sie beispielsweise jederzeit sowohl Klicks als auch Seitenaufrufe benötigen, würde ich Ihnen empfehlen, diese als JSON-Speicher zu verwenden
CREATE TABLE user_click_by_hour(
userid long,
time_stamp timestamp,
val text,
PRIMARY KEY(userid,time_stamp)
)
val ist ein JSON-Objekt, das Klicks, Seitenaufrufe usw. enthält.
Vorteil
1.Sie müssen sich keine Gedanken darüber machen, die Tabelle zum Hinzufügen zusätzlicher Spalten zu ändern, wodurch für jeden vorherigen Eintrag ein Nullwert hinzugefügt wird
- Wenn diese Daten wachsen sollen, müssen Sie viel Platz sparen, da in jedem Knoten eine Spaltenmetadaten weniger vorhanden sind