Was sind die praktischen Einschränkungen für eine Säulenfamilie in Cassandra?

10

In Cassandra wird nicht empfohlen, mehr als ein paar tausend Spaltenfamilien zu haben , sagen wir 2.000, um zu argumentieren. In Fällen, in denen mehr als 2.000 Datentypen beibehalten werden müssen, besteht ein Ansatz darin, mehrere nicht verwandte Datentypen in jede Spaltenfamilie zu zerlegen.

Beispielsweise könnte eine einzelne CF Bestellungen, Rechnungen und Kunden enthalten, vorausgesetzt, ihre Zeilenschlüssel sind unterschiedlich (z. B. mit dem Präfix des Objekttyps, dh die Schlüssel einer einzelnen CF können beide Order|1234und enthalten Customer|1234). Eine zweite CF kann beispielsweise Adressen, LineItems und OrderTypes enthalten. Was sind angesichts der grundsätzlichen Durchführbarkeit dieses Ansatzes die praktischen Grenzen? Was wäre zum Beispiel falsch daran, alle 10.000 Objekttypen in einer einzigen CF zusammenzufassen? Soweit ich aus dem Cassandra-Wiki ersehen kann , gibt es keine feste Beschränkung für die Größe eines CF.

Andrew Swan
quelle

Antworten:

6

Ich bin kein Fan. Es ist ungefähr so ​​gut wie das Erstellen einer relationalen Tabelle namens OrdersOrCustomers mit Spalten, die für beide definiert sind. Die Strafe für die Speicher-Engine ist in Cassandra aufgrund des Speichers mit spärlichen Zellen unter der Haube etwas geringer, aber es ist immer noch eine schlechte Praxis.

Dies beißt Sie später, wenn Sie Ihre Daten abbilden / reduzieren möchten. Jede Aufgabe muss alle Ihre Daten scannen und die Zeilen herausfiltern, die nicht mit dem übereinstimmen, woran Sie tatsächlich interessiert sind (z. B. Kunden). Und viel Glück beim Verstehen der Statistiken, die Cassandra pro CF verfolgt. ("Ist diese CF die Quelle von 80% meiner Anwendung, die aufgrund der Bestelldaten gelesen wird? Oder aufgrund der Kundensitzungen, mit denen sie kombiniert wird? Oder aufgrund der anderen fünf Datentypen, die ich eingegeben habe?")

Wenn Sie unbedingt Zehntausende oder Hunderttausende von CFs brauchen? Selbst dann würde ich Cassandra lieber ohne Arenazuweisung ausführen, als mein Datenmodell so zu verstümmeln.

jbellis
quelle
Danke für deine Antwort, Jonathan. Ich muss mich über die Zuweisung der Arena informieren, um den letzten Satz zu verstehen. Ist die Verwendung der Arenazuweisung eine Konfigurationsoption?
Andrew Swan
Oder wenn die Arenazuweisung heutzutage in Cassandra integriert ist, wie schwierig wäre es dann, die Zuordnung der Arenen von Spaltenfamilien aufzuheben, auf die innerhalb eines konfigurierbaren Zeitraums nicht zugegriffen wurde? Lohnt es sich, ein JIRA-Ticket dafür zu protokollieren?
Andrew Swan
1
Cassandra ist bereits klug im Spülen, um den Speicherdruck zu entlasten. Das Problem sind Worst-Case-Szenarien, in denen alles aktiv ist.
Jbellis
In welchem ​​Fall ist die einzige Lösung, um einen zweiten Ring zu haben?
Andrew Swan