2012-06-25 2 views
14

Вкратце: если у вас есть большое количество документов с различными размерами, где относительно небольшое количество документов достигает максимального размера объекта, каковы наилучшие методы хранения этих документов в 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) Используйте дополнительную «реляционную» коллекцию для хранения отношения «один ко многим», но количество документов в этой коллекции будет легко превышать сто миллиардов строк.

+0

Нужно ли запрашивать эти необязательные поля? – Thilo

+1

«Есть ли GridFS для интеллектуального chunking также для коллекции файлов?». Нет. Метаданные файла должны вписываться в один документ BSON. – Thilo

+0

Какая атомичность вам нужна для обновлений/вставок? – Thilo

ответ

1

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

Смежные вопросы