Хранение очень больших документов в MongoDB

Вкратце: если у вас есть большое количество документов с различными размерами, когда относительно небольшое количество документов достигает максимального размера объекта, каковы наилучшие методы хранения этих документов в MongoDB?

У меня есть набор документов вроде:

{_id: ...,
  values: [12, 13, 434, 5555 ...]
}

Длина списка значений сильно варьируется от одного документа к другому. Для большинства документов у него будет несколько элементов, для нескольких из них будет десятки миллионов элементов, и я нажму максимальное ограничение размера объекта в MongoDB. Проблема заключается в любом специальном решении, которое я придумал для тех очень больших (и относительно немногих) документов, которые могут повлиять на то, как я храню небольшие документы, которые, в противном случае, будут жить счастливо в коллекции MongoDB.

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

1) Используйте другое хранилище данных: это кажется слишком резким. Мне нравится MongoDB, и это не похоже на то, что я ударил по размеру для многих объектов. В случае слов мое приложение может обрабатывать очень большие объекты, а остальные - по-разному. Это просто не кажется элегантным.

2) Используйте GridFS для хранения значений. Как и blob в традиционной базе данных, я мог хранить первые несколько тысяч элементов значений в документе, а если в списке больше элементов, я мог бы сохранить остальные в GridFS объект как двоичный файл. Я не смог бы найти в этой части, но я могу жить с этим.

3) Злоупотребление GridFS: я могу хранить каждый документ в gridFS. Для большинства (небольших) документов двоичный фрагмент будет пустым, потому что коллекция файлов сможет сохранить все. В остальном я мог хранить лишние элементы в коллекции кусков. Означает ли это накладные расходы по сравнению с вариантом №2?

4) Действительно злоупотреблять GridFS: я мог бы использовать необязательные поля в коллекции файлов GridFS для хранения всех элементов в значениях. Делает ли GridFS интеллектуальное разделение и для коллекции файлов?

5) Используйте дополнительную "реляционную" коллекцию для хранения отношения "один ко многим", но количество документов в этой коллекции будет легко превышать сто миллиардов строк.

Ответы

Ответ 1

Если у вас есть большие документы, попробуйте сохранить некоторые метаданные о них в MongoDB и поместите остальные данные - часть, на которую вы не будете запрашивать - снаружи.