2010-06-09 20 views
5

He probado bases de datos NoSQL como CouchDB, MongoDB y Cassandra y observé la importancia de absorber una gran cantidad de espacio de disco en relación con los pares clave-valor insertados. Al comparar las bases de datos sin esquemas CouchDB y MySQL CouchDB consume mucho más espacio en disco que MySQL. Sé que las bases de datos de valores clave son, por defecto, versiones y tienen una necesidad prolongada y necesitan una optimización de clave. La comparación fue entre aproximadamente 15 millones de filas en MySQL y 1-5 millones de documentos en la lista de DB de NoSQL.Espacio en disco hambriento Las bases de datos de NoSQL

Mi pregunta es: ¿Hay algún NoSQL con buena compresión/compresión de datos? ¿Para que pueda tener una base de datos NoSQL con un tamaño más cercano a 5GB que 50GB?

Respuesta

1

MongoDB tiene una función de "reparación de base de datos" que también realiza una compactación. Sin embargo, tal compactación no va a suceder mientras el DB se está ejecutando.

Pero si el espacio de la base de datos es un problema grave, entonces intente configurar un par maestro/esclavo MongoDB. Como los datos necesitan compactación, ejecute la reparación en el esclavo, permita que se "ponga al día" y luego cámbielos. Ahora puede compactar de forma segura el maestro.

Pero tengo que hacer un eco jbellis comentario: es probable que necesite más espacio y la mayoría de estos productos están asumiendo que el espacio en disco es (relativamente) barato. Si el espacio en disco es muy ajustado, entonces encontrará que MongoDB tiene un tamaño razonable, pero le será difícil competir con los datos tabulares de CSV.

Piénselo de esta manera, ¿Qué es más eficiente en el uso del espacio?

  • un archivo CSV con un millón de líneas
  • mismos datos que en el formato JSON

Obviamente, el JSON va a ser más larga b/c que estés repitiendo los nombres de campo en todo momento. La única excepción es un archivo CSV con 100 columnas, de las cuales solo se rellenan unas pocas para cada fila. (pero probablemente esos no sean sus datos)

+0

Es cierto, si utiliza nombres de campo largos, necesita más espacio en disco al usar Mongodb. Y Mongodb preasigna archivos de 2 gigabytes. – TTT

+1

Sí, CouchDB también tiene una opción "compacta" que después de la prueba reduce el tamaño del db varias veces (Cassandra lo hace como "en segundo plano" debido a las grabaciones en bloque mejor organizadas). – jlmfao

+0

En este sentido, si hay un problema con 1 nodo con suficiente espacio en disco, pruebe algo como HBase o Cassandra, es muy fácil agregar más almacenamiento de datos (¡y poder de procesamiento!) Simplemente agregando más nodos. No sé cómo están estructurados MongoDB/CouchDB, así que no sé si puedes hacer lo mismo con ellos fácilmente y simplemente. – Drizzt321

1

¿Está revisando la "longitud del archivo" o el tamaño real de la asignación?

Muchas bases de datos asignan escasamente estructuras de archivos y su "longitud" es mucho mayor que su tamaño en disco.

+0

Compruebo que ese búfer de archivo no es tan grande, así que ni siquiera lo considero en db como en 15 millones de documentos (incluso si son pocos GB). Creo que este "hambriento de espacio" es la semana de los dreads de Shemaless, pero no estoy seguro. – jlmfao

4

El espacio en disco es hoy el recurso más barato, por lo que si puede cambiarlo por menos búsquedas o menos CPU, es una buena operación. Eso es lo que hace Casandra.

+2

Espacio en disco magnético sí, pero no espacio en SSD, que es lo que usted querrá que tenga un DB de alto rendimiento almacenado de todos modos. Las búsquedas, por otro lado, son casi gratuitas en las SSD. Además, el empaquetamiento eficiente de datos en páginas en el disco significa un caché mucho más efectivo en la capa buffer de la página dentro del DB, otra victoria. – TheManWithNoName

+1

magnetic vs ssd no es un tamaño único para todos; si su conjunto de datos calientes encaja en ram (¡muy común!) entonces SSD simplemente está tirando dinero por el desagüe. para cargas de trabajo menos predecibles, ve a Cassandra desplegada en SSD, donde evitar las búsquedas de escrituras es una gran ganancia para la amplificación (no) de escritura. – jbellis

1

Creo que el problema es la clave. CouchDB almacena sus datos en un b-tree. UUID: las claves son la causa por la que necesita una gran cantidad de espacio en el disco. B-tree almacena datos compactos por naturaleza, excepto UUID's. Intenta encontrar una clave que sea más cómoda para un b-tree.

Cuestiones relacionadas