Массив против карты в mongodb - PullRequest
0 голосов
/ 07 января 2019

У нас есть сложная структура, которую мы храним в Монго, и на ней выполняется много обработки, и она часто обновляется.

Как часть структуры, карта имеет что-то вроде Map<Enum, Map<String, Object> data

Это то, что сохраняется в монго и обновляется.

Таким образом, структура в монго становится чем-то вроде

"data" : {
        "Category" : {     // Value of the enum
            "Test" : {     // Name of the value to categorize data with
                "count" : 2, 
                "values" : [
                  "value-1",
                  "value-2",
                ]
            }
        }
    }

Мотивация сохранения такой структуры состоит в том, чтобы ускорить обработку, так как нам нужно много поисков для добавления новых данных к тем же Category и Name, и они обновляются в монго

Очевидно, что сейчас, когда нам нужно будет добавить индексы и выполнить сложный запрос в будущем, это будет непросто.

Так ищите предложение изменить это на что-то более расширяемое?

Чтение об этом похоже на структуру, что-то такого типа будет гораздо лучше

List<MyObject> data;

Где MyObject

Enum Category;
String Name;
int count;
List<String> values;

Но поскольку мы будем обрабатывать эти данные, поиск каждого в списке будет намного медленнее, чем поиск по карте.

Есть ли способ, где у нас может быть схема типа Array в монго, но я могу сохранить Map в своем коде Java для более быстрого поиска?

1 Ответ

0 голосов
/ 07 января 2019

Единственный способ сохранить массив в mongodb и map в java - это преобразовать его из массива в map на стороне сервера. У нас много подобных ситуаций в моей работе и то, что мы обычно делаем.

Также я бы порекомендовал вам упростить документы, которые вы храните в mongodb db. Попробуйте преобразовать значения массива в отдельные документы. Это потребует большого количества избыточности, но вы получите больше концептуальности, простоты индексации и расширенных возможностей запросов. Кроме того, растущий массив в документе снизит производительность записи, поскольку он перезапишет все, чтобы освободить пространство, поскольку пространство документа непрерывно.

Наблюдая за вашей заданной структурой документа, кажется, что только ценные данные, которые вы храните, на самом деле являются значениями внутри массива значений.

Так что просто разбейте ваш массив на отдельные документы.

{
    value: 'value-1'
},
{
    value: 'value-2'
},
{
    value: 'value-3'
},

Зависит от запросов, которые вы выполняете к нему, но такая структура даст вам больше прироста производительности и запросов свободы.

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...