Крупномасштабное хранилище для постепенно добавляемых документов?

Мне нужно хранить сотни тысяч (прямо сейчас, потенциально многие миллионы) документов, которые начинаются пустыми и часто добавляются, но никогда не обновляются иным образом и не удаляются. Эти документы никак не связаны между собой, и для доступа к ним требуется только уникальный идентификатор.

Доступ для чтения - это некоторое подмножество документа, которое почти всегда начинается на полпути в некотором проиндексированном месте (например, «документ № 4324319, сохранить № 53 до конца»).

Эти документы начинаются с очень небольшого размера, в несколько килобайт. Обычно они достигают окончательного размера около 500 КБ, но многие достигают 10 МБ и более.

В настоящее время я использую MySQL (InnoDB) для хранения этих документов. Каждое из дополнительных сохранений просто выгружается в одну большую таблицу с идентификатором документа, которому оно принадлежит, поэтому чтение части документа выглядит как «выберите * из сохранений, где document_id = 14 и save_id> 53, порядок по save_id», а затем вручную объедините его все вместе в коде.

В идеале я бы хотел, чтобы решение для хранения было легко масштабируемым по горизонтали, с резервированием по серверам (например, каждый документ, хранящимся как минимум на 3 узлах) с легким восстановлением вышедших из строя серверов.

Я рассмотрел CouchDB и MongoDB как возможные замены MySQL, но я не уверен, что какой-либо из них имеет смысл для этого конкретного приложения, хотя я открыт для убеждений.

Есть ли какие-либо предложения по поводу хорошего решения для хранения?

6
задан Community 22 September 2017 в 17:57
поделиться