У меня есть коллекция MongoDB с именем market_data. У него есть документы, которые выглядят так:
{
"_id" : ObjectId("1235"),
"nm" : " eod_ny",
"asOfDt" : "2018-11-20",
"rgnId" : 1,
"mrktCntxtDfId" : ObjectId("32345")
"rlsd" : false,
"crtdOn" : ISODate("2018-11-21T02:05:12.331Z"),
“observations” : [
{
Key1: “abc”,
Key2: : “def”
},
{
Key1: “123”,
Key2: : “456”
}
]
}
Для большинства документов длина массива наблюдений значительно меньше, но для небольшого количества записей (около 20-30) ежедневно массив наблюдений содержит более миллиона записей и превышает лимит в 16 МБ.
Есть ли какая-нибудь стратегия, которую я могу применить для хранения этих данных без перехода в GridFS.
Я использую в своем приложении последнюю версию необработанного драйвера Java MongoDB.
Можете ли вы указать мне на ответ, в котором есть решение, потому что я не могу его найти. Также я познакомился с последовательным подходом, добавив ключ последовательности и разбив этот объект на дочерний объект.
Нет никакого один ответ, в чем собственно и дело. Скорее всего, вам «следует» разбить массив на его собственную коллекцию, а не встраивать. Но если вы действительно прочитаете связанные ответы, тогда вы должны лучше понять, почему каждая концепция важна.
Большие (и потенциально неограниченные) массивы - антипаттерн производительности. Вам обязательно нужно пересмотреть свою модель данных, если она приближается или превышает 16 МБ на документ. Похоже, ваши наблюдения будут данными временных рядов. В блоге MongoDB есть серия сообщений, которые должны помочь: Данные временных рядов и MongoDB.




Вы не можете превышать предел BSON. Вот почему он называется предел. Очень простой способ действий здесь - массивы с миллионами записей просто непрактичен. Вместо этого поместите данные в отдельную коллекцию. Этот вопрос уже обсуждался и давался подробный ответ в давних ответах.