Ich versuche, das beste Datenmodell zu finden, um eine sehr große MySQL-Tabelle in Cassandra anzupassen. Diese Tabelle ist wie folgt strukturiert:Cassandra, wie man eine große Tabelle dynamisch filtert und aktualisiert?
CREATE TABLE big_table (
social_id,
remote_id,
timestamp,
visibility,
type,
title,
description,
other_field,
other_field,
...
)
Eine Seite (die hier nicht ist) kann viele socials enthalten, die viele remote_ids enthalten.
Social_id ist der Partitionierungsschlüssel, remote_id und Zeitstempel sind der Clusterschlüssel: "Remote_id" gibt Unicity, "Time" wird verwendet, um die Ergebnisse zu ordnen. So weit, ist es gut.
Das Problem ist, dass Benutzer auch auf ihren Seiteninhalt suchen können, Filtern nach einem oder mehreren sozialen Netzwerken, einer oder mehreren Arten, Sichtbarkeit (könnte 0,1,2 sein), eine Reihe von Daten oder gar nichts. Darüber hinaus sollten Benutzer basierend auf den Filtern Sichtbarkeit festlegen können.
Ich habe versucht, diesen Fall zu behandeln, aber ich kann wirklich eine nachhaltige Lösung finden. Das Beste, was ich habe, ist, eine weitere Tabelle zu erstellen, die ich mit der Originalversion mithalten muss. Diese Tabelle hat:
- page_id: Partitionsschlüssel
- Zeitstempel, social_id, Typen, remote_id: Clustering-Schlüssel
Plus, für jede Kombination von Filtern eine materialisierte Ansicht erstellen, das ist Wahnsinn .
Kann ich vermeiden, die zweite Tabelle zu erstellen? Was wäre in diesem Fall das beste Cassandra-Modell? Sollte ich über einen Wechsel zu anderen Technologien nachdenken?
Ok für die Replikation von Inhalten, aber wie würden Sie die Tabelle mit dem Problem modellieren, das ich angegeben habe (mehrere dynamische Filter)? Würden Sie für jede Kombination von Filtern eine Tabelle erstellen? Oder eine Tabelle plus viele materialisierte Ansichten? Welches ist das beste Modell für diesen Fall? –
Ein Beispiel aus Cassandra: TDG-Buch schlägt vor, Abfragen, die Benutzer verwenden werden, vordefinieren (Beispiel aus dem Buch: Suche "Hotel" nach "Name" oder "free_rooms count") und Tabellen für jede Abfrage erstellen. Für alle Abfragen, die nicht vordefiniert sind, müssen Sie entweder 'SELECT *; 'auswählen und diese auf der App-Seite durcharbeiten oder sekundäre Indizes verwenden. – doz10us
Der sekundäre Index wird jedoch nicht für Spalten mit eindeutigen Werten (der Index entspricht der Spalte) und für Spalten mit einigen unterschiedlichen Werten (z. B. Spalte "Geschlecht") empfohlen. – doz10us