Pregunta

¿Puede compartir sus pensamientos de cómo sería que aplicar los datos de versiones en Cassandra.

Supongamos que necesito registros de versión en una libreta de direcciones simple. (Registros de libreta de direcciones se almacenan como filas de una ColumnFamily). Espero que la historia:

  • se utiliza con poca frecuencia
  • será utilizado a la vez para presentarlo de una manera "máquina del tiempo"
  • no habrá más versiones que unos pocos cientos a un único registro.
  • historia no expirará.

Estoy pensando en el siguiente enfoque:

  • Convertir la libreta de direcciones para el Super columna Familia y almacenar múltiples versiones de dirección registros de libros en una fila con guía (por el sello de tiempo) como Super columnas.

  • Crear nuevo Super Columna familia para almacenar los registros antiguos o cambios a los registros. Dicha estructura se vería de la siguiente manera:

    { 'Dirección clave de fila libro': { 'Tiempo STAMP1': { 'Nombre': 'nombre', 'Modificado por': 'id de usuario', },

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

    'otra dirección clave de fila libro': { 'Sello de tiempo': { ....

  • versiones tienda como objeto serializado (JSON) unidos en una nueva ColumnFamilly. En representación de conjuntos de versión como filas y columnas como versiones. (Modelado después simple versiones de documentos con CouchDB )

¿Fue útil?

Solución

Si usted puede agregar el supuesto de que las libretas de direcciones suelen tener menos de 10.000 entradas en ellos, a continuación, utilizando una fila por cada dirección de la línea de tiempo libro en una familia súper columna sería un enfoque decente.

Una fila se vería así:

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

donde la clave, la fila de la libreta de direcciones, cada nombre de súper columna es una marca de tiempo y los subcolumnas representan el contenido del libro de direcciones para esa versión.

Esto permitiría a leer la versión más reciente de una libreta de direcciones con una sola consulta y también escribe una nueva versión con un solo inserto.

La razón por la que sugieren usar esto si las libretas de direcciones son menos de 10.000 elementos es que Super columnas deben estar completamente deserializan cuando se lee ni un solo subcolumna. En general, no es tan malo en este caso, pero es algo a tener en cuenta.

Un enfoque alternativo sería el uso de una sola fila por cada versión de la libreta de direcciones, y usar un CF separada con una línea fila vez por la libreta de direcciones como:

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

A continuación, some_uuid1 y corresponden a la tecla some_uuid2 fila para aquellas versiones de la libreta de direcciones. La desventaja de este método es que requiere dos consultas cada vez que se lee el libro de direcciones. La ventaja es que permite leer de manera eficiente seleccionar sólo partes de una libreta de direcciones.

Otros consejos

HBase ( http://hbase.apache.org/ ) tiene esta funcionalidad incorporada. Darle una oportunidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top