2017-01-08 2 views
1

Ich muss ein Projekt mit einer NoSql-Basis, entweder Couchbasis oder Cassandra entwickeln. Ich würde gerne wissen, ob es empfehlenswert ist, die Daten jedes Kunden in einem Eimer zu partitionieren?nosql separate Daten nach Client

In meinem Fall wird es nie Anfragen zwischen den verschiedenen Clients geben. Die Daten können vollständig getrennt werden.

Für couchbase sah ich, dass für jeden Eimer eine Speicherkapazität, für ihn reserviert war.

Wo muss die Trennung an einem anderen Ort Dokument oder Super-Spalte für Cassandra erfolgen.

Danke

Antwort

1

Wo die Trennung hat an einem anderen Ort Dokument oder Super-Säule für cassandra getan werden.

Tipp # 1, wenn sie mit Cassandra arbeiten, löschen vollständig das Wort "Super Spalte" aus Ihrem Wortschatz.

Ich würde gerne wissen, wenn es empfohlen wird, die Daten jedes Kunden in einem Eimer zu partitionieren?

Das hängt davon ab. Es klingt so, als würden Ihre Abfragen hauptsächlich auf einer Kunden-ID basieren, daher ist es sinnvoll, sie als Teil Ihres Partitionsschlüssels zu haben. Wenn jedoch jede Kundenpartition Millionen von Reihen und/oder Spalten darunter hat, wird das sehr groß werden.

Tipp # 2, richtige Cassandra Modellierung erfolgt auf der Grundlage, wie Ihre erforderlichen Abfragen aussehen. Ohne die Arten von Abfragen zu sehen, die Sie bedienen müssen, wird es schwierig sein, genauer zu sein.

Wenn Sie Kundendaten in Bezug auf Konten und Adressen usw. haben, kann es sinnvoll sein, eine customers Tabelle mit einem PRIMARY KEY von nur customer_id zu erstellen. Wenn Sie jedoch feststellen, dass Sie Ihre Kunden (z. B.) nach email_address abfragen müssen, erstellen Sie eine Tabelle customers_by_email, kopieren Sie Ihre Daten und erstellen Sie einen PRIMARY KEY, der dies unterstützt.

Wenn Sie darüber hinaus Daten über Kundenaktivitäten speichern, sollten Sie eine customer_activity Tabelle mit einem PRIMARY KEY von PRIMARY KEY ((customer_id,month),activity_time) in Erwägung ziehen. Das wird customer_id und month als einen Partitionsschlüssel verwenden, der die Aktivität des Kunden speichert, die von activity_time gruppiert wird. In diesem Fall, wenn wir month nicht als zusätzlichen Partitionsschlüssel verwenden würden, würde jede customer_id Partition kontinuierlich beschrieben, bis es zu plump würde, in die Datenbank zu schreiben oder abzufragen (ungebundenes Zeilenwachstum).

Zusammenfassung:

  • Wenn jemand Ihnen sagt, eine Super-Säule in Cassandra zu verwenden, schlagen sie.
  • Sie müssen Ihre Abfragen kennen vor Sie entwerfen Ihre Tabellen.
  • Ja, customer_id wäre ein guter Weg, um Ihre Daten getrennt zu halten und sicherzustellen, dass jede Abfrage auf einen einzigen Knoten beschränkt ist. - Erstellen Sie Ihre Partitionsschlüssel, um das ungebundene Zeilenwachstum zu berücksichtigen, damit Sie nicht zu viele Daten in dieselbe Partition schreiben.
+0

Großartig, danke für Ihre Erklärung. Die Zielanwendung kommt einer Online-Buchhaltungsanwendung nahe, aber fast nur in Absprache mit dem Kunden. Die Daten werden durch einen automatischen Prozess hinzugefügt. Ich habe noch nie Cassandra, nur MongoDb in Nosql verwendet. (Gruppierung dies erfolgt durch Spalten Familien nicht Super-Spalte) – user4185975

Verwandte Themen