Query a mongoDB desde python

Phatality

Hola,

Tengo que leer una serie de documentos llamando a una colección de mongoDB desde python (usando la librería pymongo) y me topo con el problema de que algunos docuementos pesan más de 16 MB, que es el límite que impone pymongo para poder leer documentos. He leído por ahí que hay una API llamada GridFS que permite leer desde mongo sudando de ese límite, pero no encuentro ningún ejemplo... ¿Os habéis encontrado alguna vez con este problema?

Vashealer

No deberían pesar más de 16mb ya que daría error al insertarlos/updatearlos.

Muy mal tiene que estar el diseño de esa db para que ocupen tanto los docs.

Quote del mismo mongo boss :

So, on your blog example, 4MB is actually a whole lot.. For example, the full uncompresses text of "War of the Worlds" is only 364k (html): http://www.gutenberg.org/etext/36

If your blog post is that long with that many comments, I for one am not going to read it :)

For trackbacks, if you dedicated 1MB to them, you could easily have more than 10k (probably closer to 20k)

So except for truly bizarre situations, it'll work great. And in the exception case or spam, I really don't think you'd want a 20mb object anyway. I think capping trackbacks as 15k or so makes a lot of sense no matter what for performance. Or at least special casing if it ever happens.

-Eliot

No tiene sentido tener objetos tan grandes, reventarías la ram en cuanto hubiera un de operaciones.

Pero si aún así quieres hacerlo usa como dices el gridfs, : https://docs.mongodb.com/manual/core/gridfs/

Partes en trozos el doc.

Saludos

1 respuesta
Phatality

#2 Gracias por la respuesta! Se trata de casos muy excepcionales y escasos, pero claro, al hacer una query gorda igual sucede que un docuemnto de cada 100k tiene dentro un campo con un string gigantesco. Muy probablemente sea morralla que a saber cómo y por qué se ha guardado en la DB :S

GridFS, ok. Lo que veo en la docu es cómo guardar docs a trozos usando GridFS, pero mi duda es: Si tengo los documentos tal cual en MongoDB, cómo puedo usar GridFS para leer esos documentos y procesarlos en python?

Vashealer

por ejemplo : http://api.mongodb.com/python/current/api/gridfs/

Usuarios habituales

  • Vashealer
  • Phatality