2011-06-30 11 views
9

Solo quería una opinión, o al menos una regla general sobre cuál es mejor en una estructura de base de datos para CouchDB. ¿Es mejor tener todos los datos relacionados para un artículo en un solo documento, o tener partes de todos los artículos en muchos documentos?Documento grande frente a muchos documentos

Déjenme ilustrar lo que quiero decir con un ejemplo. Actualmente registro 4 eventos de nuestro sistema, en intervalos de 1 minuto, vamos a llamarlos event_1, event_2, event_3 y even_4. Los datos se almacenan para cada uno de los 4 eventos, independientemente del valor (siempre obtendrá un valor, incluso si todo está bien).

Opción 1: eventos de grupo, y añadir nuevos valores de marca de tiempo/al documento ...

{ 
    event_1: [ 
     { timestamp, value }, 
     { timestamp, value }, 
     { timestamp, value }, 
     ...etc 
    ] 
}, 
{ 
    event_2: [ 
     { timestamp, value }, 
     { timestamp, value }, 
     { timestamp, value }, 
     ...etc 
    ] 
}, 
{ 
    event_3: [ 
     { timestamp, value }, 
     { timestamp, value }, 
     { timestamp, value }, 
     ...etc 
    ] 
} 
...etc 

Opción 2: Mantener una lista enorme de documentos, con los últimos valores (que es cómo se envían realmente desde el sistema)?

{ 
    timestamp: { 
     { event_1, value }, 
     { event_2, value }, 
     { event_3, value }, 
     { event_4, value } 
    } 
}, 
{ 
    timestamp: { 
     { event_1, value }, 
     { event_2, value }, 
     { event_3, value }, 
     { event_4, value } 
    } 
}, 
{ 
    timestamp: { 
     { event_1, value }, 
     { event_2, value }, 
     { event_3, value }, 
     { event_4, value } 
    } 
} 
...etc 

Actualmente estoy usando la segunda opción, pero era sólo curiosidad para ver las opiniones de la gente sobre lo que se considera la mejor práctica ... estoy empezando a pensar que la opción 1 podría ser mejor, ya que el camino Estoy informando, los resultados se agrupan por evento (se muestra en el gráfico de líneas de cada evento).

Respuesta

8

Definitivamente prefiero la opción 2.

Desde CouchDB mantiene todas las revisiones de sus documentos no habría gran consumo de memoria utilizando la opción 1. Así que con cada nuevo valor a almacenar los nuevos valores y también una copia de la los viejos. Usando la Opción 2 solo almacena los nuevos valores sin tocar los antiguos.

+0

@phlogratos, buen punto! Todavía no había pensado en eso ... – crawf

+2

@phlogratos para aclarar, CouchDB solo conserva las revisiones anteriores de un documento hasta que se ejecuta una compactación. –

+6

+1. El comisionado de CouchDB Chris Anderson dice "a CouchDB le gustan las listas altas, no las listas de grasa". Imagine sus documentos en un archivo de texto, uno por línea. Tener pocos documentos muy grandes sería una lista importante. Tener muchos documentos muy pequeños sería una lista alta. – JasonSmith

Cuestiones relacionadas