Como armazenar e atualizar com eficiência dados binários no Mongodb?

Eu estou armazenando um grande array binário dentro de um documento. Desejo adicionar continuamente bytes a esse array e, às vezes, alterar o valor dos bytes existentes.

Eu estava procurando por alguns modificadores de $ append_bytes e $ replace_bytes, mas parece que o melhor que posso fazer é $ push para matrizes. Parece que isso seria factível realizando operações do tipo seek-write se eu tivesse acesso de alguma forma ao bson subjacente no disco, mas não me parece que haja qualquer maneira de fazer isso no mongodb (e provavelmente por uma boa razão).

Se, em vez disso, eu apenas consultasse esse array binário, editasse ou adicionasse a ele e atualizasse o documento, reescrevendo todo o campo, qual seria o custo disso? Cada matriz binária será da ordem de 1-2 MB e as atualizações ocorrerão uma vez a cada 5 minutos e em milhares de documentos. Pior ainda, não há uma maneira fácil de espalhá-los (no tempo) e eles geralmente estarão acontecendo próximos uns dos outros nos intervalos de 5 minutos. Alguém tem uma boa noção de quão desastroso isso será? Parece que seria problemático.

Uma alternativa seria armazenar esses dados binários como arquivos separados no disco, implementar um conjunto de encadeamentos para manipular eficientemente os arquivos no disco e fazer referência ao nome do arquivo do meu documento mongodb. (Eu estou usando python e pymongo, então eu estava olhando para pytables). Eu preferiria evitar isso, se possível.

Existe alguma outra alternativa que eu estou negligenciando aqui?

Obrigado em advnace.

EDITAR

Depois de algum trabalho escrevendo alguns testes para meus casos de uso, decidi usar um sistema de arquivos separado para os objetos de dados binários (especificamente hdf5 usando pytables ou h5py). Ainda vou usar o mongo para tudo, exceto a persistência desses objetos de dados binários. Dessa maneira, posso desacoplar o desempenho relacionado ao acréscimo e atualização de operações de tipo, longe do meu desempenho básico do mongo.

Um dos desenvolvedores do mongo apontou que eu posso definir elementos de array internos usando notação de ponto e $ set (veja ref no comentário abaixo), mas não há como fazer um intervalo de conjuntos em um array atomicamente.

Além disso - se eu tenho 1.000s de campos de dados binários de 2MB dentro dos meus documentos mongo e eu estou atualizando e aumentando-os frequentemente (como em pelo menos uma vez a cada 5 minutos) - meu instinto me diz que o mongo terá que gerenciar muito problemas de alocação / crescimento dentro de seu (s) arquivo (s) no disco - e que, em última análise, isso levará a problemas de desempenho. Eu preferiria descarregar isso para um sistema de arquivos separado no nível do sistema operacional para manipular.

Por fim - estarei manipulando e executando cálculos em meus dados usando numpy - tanto os módulos pytables quanto os h5py permitem uma boa integração entre o comportamento numpy e o armazenamento.

questionAnswers(1)

yourAnswerToTheQuestion