Ответ 1
Если у вас есть большие документы, попробуйте сохранить некоторые метаданные о них в 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) Используйте дополнительную "реляционную" коллекцию для хранения отношения "один ко многим", но количество документов в этой коллекции будет легко превышать сто миллиардов строк.
Если у вас есть большие документы, попробуйте сохранить некоторые метаданные о них в MongoDB и поместите остальные данные - часть, на которую вы не будете запрашивать - снаружи.