Frage

Können Sie Ihre Gedanken teilen, wie würden Sie Daten implementieren in Cassandra Versionierung.

Nehmen wir an, dass ich in einem einfachen Adressbuch Version Aufzeichnungen müssen. (Adressbuch-Datensätze werden als Zeilen in einer ColumnFamily gespeichert). Ich erwarte, dass die Geschichte:

  • wird selten verwendet werden
  • werden alle an verwendet werden, wenn es in einer „Zeitmaschine“ Art und Weise zu präsentieren
  • wird es mehr Versionen nicht als einige hundert zu einem einzigen Datensatz.
  • wird die Geschichte nicht ab.

Ich betrachte den folgenden Ansatz:

  • Konvertieren der Adressbuchs Super Column Familie und speichert mehrere Version von Adressbuch Aufzeichnungen in einer Zeile eingegeben (durch Zeitstempel) als Super-Spalten.

  • Neue Super-Spalte Familie alte Aufzeichnungen oder Änderungen an den Datensätzen zu speichern. Eine solche Struktur würde wie folgt aussehen:

    { ‚Adressbuch Zeilenschlüssel‘: { 'Zeit STAMP1': { ‚Vorname‘: ‚neue Namen‘, ‚Modifiziert durch‘: ‚Nutzer-ID‘, }

    'time stamp2': {
            'first name': 'new name',
            'modified by': 'user id',
        },
    },
    

    ‚ein anderer Adressbuch Zeilenschlüssel‘: { ‚Zeitstempel‘: { ....

  • Shop-Versionen als serialisiert (JSON) Objekt in neuer ColumnFamilly angebracht. Stellvertretend für Sätze von Version als Zeilen und Versionen als Spalten. (Nach dem Vorbild einfacher Versionierung von Dokumenten mit CouchDB )

War es hilfreich?

Lösung

Wenn Sie die Annahme hinzufügen, dass Adresse Bücher typischerweise weniger als 10.000 Einträge in ihnen haben, dann eine Zeile mit je Adressbuch Zeitlinie in einer Super-Säule Familie würde ein anständiger Ansatz.

Eine Reihe würde wie folgt aussehen:

{'address_book_18f3a8':
  {1290635938721704: {'entry1': 'entry1_stuff', 'entry2': 'entry2_stuff'}},
  {1290636018401680: {'entry1': 'entry1_stuff_v2', ...},
  ...
}

, wo der Zeilenschlüssel identifiziert das Adressbuch, jeder Superspaltenname ein Zeitstempel ist, und die Unterspalten repräsentieren das Inhalt des Adressbuchs für diese Version.

Dies würde ermöglichen es Ihnen, mit nur einer Abfrage die neueste Version eines Adressbuchs zu lesen und auch eine neue Version mit einem einzigen Einsatz schreiben.

Der Grund, warum ich dies mit empfehlen, wenn Adresse Bücher sind weniger als 10.000 Elemente ist, dass Super-Spalten müssen vollständig deserialisiert werden, wenn Sie auch nur einen einzigen Unterspalt lesen. Insgesamt in diesem Fall nicht so schlimm, aber es ist etwas im Auge zu behalten.

Ein alternativer Ansatz eine einzelne Zeile pro Version des Adressbuchs zu verwenden wäre, und verwenden Sie eine separate CF mit einer Zeitlinie Zeile pro Adressbuch wie:

{'address_book_18f3a8': {1290635938721704: some_uuid1, 1290636018401680: some_uuid2...}}

Hier some_uuid1 und some_uuid2 entspricht den Zeilenschlüssel für diese Versionen des Adressbuchs. Der Nachteil dieses Ansatzes ist, dass es zwei Abfragen erfordert das Adressbuch jedes Mal gelesen wird. Der Vorteil ist, dass es lässt Sie effizient nur ausgewählte Teile eines Adressbuches lesen.

Andere Tipps

HBase ( http://hbase.apache.org/ ) hat diese Funktionalität eingebaut. Probieren Sie es aus.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top