Хорошо.Вот проблема схемы / архитектуры БД.
В настоящее время в нашем проекте мы используем MongoDB.У нас есть одна БД с одной коллекцией.Всего в этой коллекции почти 4 миллиарда документов (ценность постоянна).Каждый документ имеет уникальный конкретный идентификатор, и существует много различной информации, связанной с этим идентификатором (именно поэтому был выбран MongoDB - данные совершенно разные, поэтому схема не подходит).
{
"_id": ObjectID("5c619e81aeeb3aa0163acf02"),
"our_id": 1552322211,
"field_1": "Here is some information",
"field_a": 133,
"field_с": 561232,
"field_b": {
"field_0": 1,
"field_z": [45, 11, 36]
}
}
Цель этогоколлекция предназначена для хранения большого количества данных, которые легко обновлять (некоторые данные обновляются каждый день, некоторые обновляются раз в месяц) и выполнять поиск по различным полям для получения идентификатора.Также мы храним «историю» каждого поля (и у нас должна быть возможность поиска по истории).Поэтому, когда были включены сверхурочные обновления, мы столкнулись с проблемой, которая называется MongoDB: максимальный размер документа 16 МБ.
Мы пробовали несколько обходных путей (например, разделение документа), но все они включают либо $ group или $ lookup этап агрегации (группировка по id, см. пример ниже), но оба не могут использовать индексы, что делает поиск по нескольким полям ОЧЕНЬ длинным.
{
"_id": ObjectID("5c619e81aeeb3aa0163acd12"),
"our_id": 1552322211,
"field_1": "Here is some information",
"field_a": 133
}
{
"_id": ObjectID("5c619e81aeeb3aa0163acd11"),
"our_id": 1552322211,
"field_с": 561232,
"field_b": {
"field_0": 1,
"field_z": [45, 11, 36]
}
}
Также мы не можем использовать $ match перед ними, потому что поиск может включать логические операторы (например, field_1 = 'a' && field_c! = 320 , где field_1 из одного документа, а field_c из другого, поэтому поиск должен выполняться после группировки / объединения документов) + логическое выражение может быть ОЧЕНЬ сложным.
Так есть ли хитрые обходные пути?Если нет, какие другие БД вы можете предложить для перехода?
С уважением.