Ich brauche eine Liste von N Benutzern mit den neuesten Aktionen mit Cassandra.Cassandra 2.1: Wie modelliere ich für die zuletzt aktiven Benutzer?
Ich habe versucht, das folgende Schema zu verwenden:
CREATE TABLE user_actions(
partition_key int,
username int,
action_time timestamp,
PRIMARY KEY(partition_key, action_time)
WITH CLUSTERING ORDER BY(action_time DESC);
Wenn ein Benutzer zum ersten Mal in ihm einen neuen Eintrag erstellt. Ich kann die start_time
-Eigenschaft jedoch nicht aktualisieren, da sie als Clusterschlüssel verwendet wird. I könnte die alten Daten löschen und einen neuen Eintrag erstellen, wenn der Benutzer eine andere Aktion ausführt - aber Benutzeraktionen treten häufig auf und wir werden schnell die Tombstone-Grenze erreichen.
Weiß jemand, wie ich die Daten am besten modellieren könnte, um dies zu erreichen?
Dank Chris - ich habe dies voraus gegangen und umgesetzt. Es gibt jedoch ein Problem: Die Abfrage gibt Duplikate zurück. Während ich diese Duplikate in meiner Anwendung herausfiltern kann, habe ich mich gefragt, ob es einen Weg gibt, der diese Duplikate nicht erzeugt. – cscan
Filterung ist wahrscheinlich die einfachste Option. In diesem Fall möchten Sie wahrscheinlich das LIMIT aus der Abfrage entfernen. Das Treiber-Abruflimit wird das Paging durch die Partition für Sie übernehmen. Es könnte jedoch einige schlechte Schlimmeszenarien einführen. Sie können möglicherweise ein: '((partition_key, day), username)', das nur die letzte action_time für jeden Benutzer speichert, und behalten top N von iterating dies. Ich würde erwarten, dass es schlimmer wird, aber es kann wirklich davon abhängen, wie viele Benutzer aktiv sind. Wenn Sie nur wenige aktive Benutzer am Tag haben, die viel tun, müsste das ursprüngliche Modell mehr durchgehen als andere –