mongodb: обновление документа или замена существующего, что быстрее - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть иерархия документов в одной коллекции, которая для некоторых документов может быть довольно глубокой.Например, документ может содержать массив объектов, которые сами могут содержать другие объекты и, возможно, массивы.Эти документы фактически представляют объекты, которые я храню в оперативной памяти: это вершины Vertx, представляющие подключенных пользователей.API-интерфейсы взаимодействуют с ними в представлениях памяти, например, для изменения значения поля, добавления нового или получения другого.Когда данные изменяются в ОЗУ, их необходимо сохранить.

Здесь у меня есть две альтернативы:

  1. , так как у меня есть полный объект в памяти, включая _id, первый вариант будет состоять в том, чтобы заменить весь документ на диске наобъект в оперативной памяти.Это также позволило бы выполнять постоянство только время от времени, скажем, после пяти или десяти изменений или создания данных, что также ускорит процесс
  2. , или сохранить только ту самую часть, которая изменилась, что может бытьхитро, если обновляемые данные лежат где-то глубоко в структуре

Очевидно, что самое простое решение - первое, но мне было интересно, будет ли оно самым быстрым, поскольку оно записывает полные блоки данныхдаже для небольших изменений?

Обновление : Чтобы прояснить ситуацию, вот выдержка из такого документа:

{
    "_id" : ObjectId("5cc000df5afdb9451e0fe762"),
    "email" : {
        "not_validated" : [ ],
        "validated" : [
            {
                "email" : "user2@yopmail.com",
                "ts" : NumberLong("1556087007701")
            }
        ],
        "default" : "user2@yopmail.com"
    },
    "msisdn" : {
        "not_validated" : [ ],
        "validated" : [ ]
    },  
    "last_connection_ts" : NumberLong("1556087007701"),
    .....
}

email объект имеет два массива, которыеудерживать все подтвержденные и еще не подтвержденные (еще не подтвержденные пользователем) электронные письма.Иногда элемент первого уровня, такой как last_connection_ts, будет изменен, но иногда, когда проверенное электронное письмо становится проверенным, его необходимо удалить из массива not_validated и добавить в массив not_validated.

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