Как эффективно хранить и обновлять двоичные данные в Mongodb?

Я храню большой двоичный массив в документе. Я хочу постоянно добавлять байты в этот массив и иногда изменять значение существующих байтов.

Я искал некоторые модификаторы типа $ append_bytes и $ replace_bytes, но, похоже, лучшее, что я могу сделать, это $ push для массивов. Кажется, что это было бы выполнимо, выполняя операции типа поиска-записи, если бы у меня был какой-то доступ к базовому bson на диске, но мне не кажется, что в любом случае это можно сделать в mongodb (и, вероятно, по хорошей причине).

Если бы вместо этого я просто запросил этот двоичный массив, отредактировал или добавил к нему, а затем обновил документ, переписав все поле, насколько это будет дорого? Каждый двоичный массив будет порядка 1-2 МБ, а обновления происходят каждые 5 минут и для тысяч документов. Хуже того, нет простого способа распространить их (вовремя), и они обычно будут происходить близко друг к другу с 5-минутными интервалами. У кого-нибудь есть чувство, насколько это пагубно? Похоже, это было бы проблематично.

Альтернативой может быть сохранение этих двоичных данных в виде отдельных файлов на диске, реализация пула потоков для эффективной работы с файлами на диске и ссылки на имя файла из моего документа mongodb. (Я использую Python и Pymongo, поэтому я смотрел на Pytables). Я предпочел бы избежать этого, хотя и по возможности.

Есть ли другая альтернатива, которую я здесь пропускаю?

Спасибо в Advnace.

EDIT

После некоторой работы, написав несколько тестов для моих вариантов использования, я решил использовать отдельную файловую систему для объектов двоичных данных (в частности, hdf5 с использованием либо pytables, либо h5py). Я все еще буду использовать монго для всего, кроме сохранения этих двоичных объектов данных. Таким образом, я могу отделить производительность, связанную с операциями добавления и обновления типов, от моей базовой производительности монго.

Один из разработчиков Монго указал, что я могу устанавливать элементы внутреннего массива, используя точечную нотацию и $ set (см. Ссылку в комментарии ниже), но в настоящее время нет способа атомарно сделать диапазон наборов в массиве.

Более того - если в моих документах mongo есть тысячи полей по 2 МБ двоичных данных, и я часто их обновляю и наращиваю (как минимум раз в 5 минут), моя интуиция говорит мне, что mongo придется управлять большим количеством проблемы размещения / роста в его файлах на диске - и это в конечном итоге приведет к проблемам с производительностью. Я бы предпочел разгрузить это в отдельную файловую систему на уровне ОС для обработки.

Наконец, я буду манипулировать и выполнять вычисления с моими данными, используя numpy - и pytables, и модули h5py обеспечивают хорошую интеграцию между numpy-поведением и хранилищем.

Ответы на вопрос(1)

Ваш ответ на вопрос