2011-07-01 23 views
10

Quiero hacer una carga masiva en MongoDB. Tengo aproximadamente 200 GB de archivos que contienen objetos JSON que deseo cargar, el problema es que no puedo usar la herramienta mongoimport ya que los objetos contienen objetos (es decir, necesitaría usar --jsonArray aaram) que está limitado a 4MB.A granel cargando MongoDB desde el archivo JSON con una serie de objetos

Existe la carga a granel de API en CouchDB en que sólo se puede escribir una secuencia de comandos y usar cURL para enviar una solicitud POST para insertar los documentos, no hay límites de tamaño ...

¿Hay algo como esto en MongoDB? Sé que hay Sleepy, pero me pregunto si esto puede hacer frente a una inserción de matriz de nidos JSON ..?

Gracias!

+3

¿Por qué no escribes un pequeño guión en tu idioma favorito? –

+0

+1 No estoy seguro de por qué el voto a favor. Me interesaría saber también. ("No, no hay nada como eso" sería una buena respuesta, si es correcta). – JasonSmith

+1

Dos días después, sigue siendo una buena pregunta sobre el desbordamiento de la pila. Hace una consulta directa, para la cual hay una respuesta correcta. Desearía que la respuesta se mostrara a sí misma. Con ese fin, contribuiré con mis propios puntos de reputación al primer usuario de Mongo para dar una respuesta clara y correcta. (Se presume que la respuesta es ** no ** pero se lo dejo a los expertos.) – JasonSmith

Respuesta

2

Ok, básicamente parece que no hay una respuesta muy buena a menos que escriba mi propia herramienta en algo como Java o Ruby para pasar los objetos (meh effort) ... Pero eso es un verdadero dolor, así que decidí simplemente dividirme los archivos hasta 4MB ... Simplemente escribí un simple script de shell usando split (nótese que tuve que dividir los archivos varias veces debido a las limitaciones). Utilicé el comando dividir con -l (números de línea) para que cada archivo tuviera x número de líneas. En mi caso, cada objeto Json tenía aproximadamente 4kb, así que adiviné los tamaños de línea.

Para cualquiera que desee hacer esto, recuerde que split solo puede hacer 676 archivos (26 * 26), así que debe asegurarse de que cada archivo tenga suficientes líneas para evitar perder la mitad de los archivos. De todos modos, pon todo esto en un buen script de bash y utiliza la importación de mongo y déjalo funcionar durante la noche. La solución más sencilla es IMO y no es necesario cortar y mezclar archivos y analizar JSON en Ruby/Java o w.e. más.

Los guiones son un poco personalizados, pero si alguien los quiere, simplemente deje un comentario y publique mal.

+0

Haha, "meh effort": una expresión sucinta de una evaluación tan común. – JasonSmith

2

Sin saber nada sobre la estructura de sus datos, diría que si no puede usar mongoimport, no tiene suerte. No hay otra utilidad estándar que pueda ajustarse para interpretar datos JSON arbitrarios.

Cuando sus datos no se ajustan a la perfección a lo que esperan los servicios de importación, casi siempre es más fácil escribir un script de importación único en un idioma como Ruby o Python para hacerlo. Las inserciones por lotes aceleran la importación considerablemente, pero no hacen lotes demasiado grandes o de lo contrario obtendrán errores (el tamaño máximo de una inserción en 1.8+ es 16Mb). En el controlador de Ruby, se puede hacer una inserción de lote simplemente pasando una matriz de valores hash al método insert, en lugar de un solo hash.

Si agrega un ejemplo de sus datos a la pregunta, podría ayudarlo más.

Cuestiones relacionadas