ОК, сначала предостережение, MongoDB имеет ограничение на размер документа.Тем не менее, самая новая версия будет охватывать ваш размер 10 МБ.
Так что некоторые полезные моменты для MongoDB .
В идеале, я хотел бы, чтобы решение для хранения былолегко масштабируется по горизонтали, с избыточностью на серверах (например, каждый документ хранится как минимум на 3 узлах) с простым восстановлением аварийных серверов.
Для репликации MongoDB поддерживает наборы реплик .Наборы реплик - это реплики с одним мастером.Если мастер отключается, система автоматически выбирает нового мастера (простое восстановление).Добавление нового узла так же просто, как запуск нового сервера и указание на существующий набор.
Для горизонтальной масштабируемости MongoDB поддерживает sharding .Sharding немного сложнее, но работает так, как вы ожидаете, разделяя записи на несколько машин (или несколько наборов реплик).
Мне нужно хранить сотни тысяч (прямо сейчас, потенциально многомиллионы) документов, которые начинаются пустыми и часто добавляются
В нескольких компаниях Mongo запущено миллиарды документов.
Mongo предлагает серию модификаторов обновления , которые очень полезны в случае , добавленного к .В частности, проверьте оператор $ push, который добавляет в конец массива.Должно быть именно то, что вам нужно.
Доступ к чтению является некоторым подмножеством документа, который почти всегда начинается на полпути в некотором проиндексированном месте (например, «документ № 4324319, сохранить № 53 до конца»).
MongoDB позволяет вам возвращать только выбранные поля (как и ожидалось).В зависимости от вашего макета вы можете использовать точечную нотацию для получения только определенных поддокументов.Если ваши обновления реализованы в виде массивов, вы также можете использовать команду $ slice , которая хорошо подходит для запроса, который вы перечислили выше.
Так что я думаю, что MongoDB отвечает всем вашим основным потребностямВот.Легко добавлять, легко запрашивать эти добавления, и встроенная репликация. Вы получаете горизонтальное масштабирование с помощью шардинга (попробуйте сначала начать с реплики)