¿Cómo almacenar y actualizar eficientemente los datos binarios en Mongodb?

Estoy almacenando una gran matriz binaria dentro de un documento. Deseo agregar continuamente bytes a esta matriz y, a veces, cambiar el valor de los bytes existentes.

Estaba buscando algunos modificadores de tipo $ append_bytes y $ replace_bytes pero parece que lo mejor que puedo hacer es $ push for arrays. Parece que esto sería factible si realizáramos operaciones de tipo de búsqueda / escritura si tuviera acceso de alguna manera al bson subyacente en el disco, pero no me parece que de todos modos haya que hacerlo en mongodb (y probablemente por una buena razón).

Si en lugar de eso solo tuviera que consultar esta matriz binaria, edítelo o añádalo, y luego actualice el documento reescribiendo todo el campo, ¿qué tan costoso será? Cada matriz binaria estará en el orden de 1-2 MB, y las actualizaciones se realizarán una vez cada 5 minutos y en miles de documentos. Peor aún, sin embargo, no existe una manera fácil de distribuirlos (a tiempo) y, por lo general, ocurrirán uno cerca del otro en intervalos de 5 minutos. ¿Alguien tiene una buena idea de lo desastroso que será esto? Parece que sería problemático.

Una alternativa sería almacenar estos datos binarios como archivos separados en el disco, implementar un grupo de subprocesos para manipular de manera eficiente los archivos en el disco y hacer referencia al nombre de archivo de mi documento mongodb. (Estoy usando python y pymongo, así que estaba mirando pytables). Preferiría evitar esto sin embargo si es posible.

¿Hay alguna otra alternativa que estoy pasando por alto aquí?

Gracias en advnace.

EDITAR

Después de algunos trabajos escribiendo algunas pruebas para mis casos de uso, decidí usar un sistema de archivos separado para los objetos de datos binarios (específicamente hdf5 usando pytables o h5py). Seguiré usando mongo para todo, excepto la persistencia de estos objetos de datos binarios. De esta manera, puedo desacoplar el rendimiento relacionado con la adición y actualización de operaciones de tipo lejos del rendimiento de mongo base.

Uno de los desarrolladores de Mongo señaló que puedo establecer elementos de la matriz interna usando la notación de puntos y $ set (ver ref en el comentario a continuación), pero en este momento no hay forma de hacer un rango de conjuntos en una matriz de forma atómica.

Además, si tengo miles de campos de datos binarios de 2MB dentro de mis documentos de Mongo y los estoy actualizando y creciendo (como al menos una vez cada 5 minutos), mi instinto me dice que Mongo tendrá que administrar muchos problemas de asignación / crecimiento dentro de su (s) archivo (s) en el disco, y esto en última instancia, dará lugar a problemas de rendimiento. Preferiría descargar eso a un sistema de archivos separado en el nivel del sistema operativo para manejar.

Finalmente, manipularé y realizaré el cálculo de mis datos usando numpy, tanto los módulos pytables como h5py permiten una buena integración entre el comportamiento de numpy y la tienda.

Respuestas a la pregunta(1)

Su respuesta a la pregunta