У меня есть иерархия документов в одной коллекции, которая для некоторых документов может быть довольно глубокой.Например, документ может содержать массив объектов, которые сами могут содержать другие объекты и, возможно, массивы.Эти документы фактически представляют объекты, которые я храню в оперативной памяти: это вершины Vertx, представляющие подключенных пользователей.API-интерфейсы взаимодействуют с ними в представлениях памяти, например, для изменения значения поля, добавления нового или получения другого.Когда данные изменяются в ОЗУ, их необходимо сохранить.
Здесь у меня есть две альтернативы:
- , так как у меня есть полный объект в памяти, включая
_id
, первый вариант будет состоять в том, чтобы заменить весь документ на диске наобъект в оперативной памяти.Это также позволило бы выполнять постоянство только время от времени, скажем, после пяти или десяти изменений или создания данных, что также ускорит процесс - , или сохранить только ту самую часть, которая изменилась, что может бытьхитро, если обновляемые данные лежат где-то глубоко в структуре
Очевидно, что самое простое решение - первое, но мне было интересно, будет ли оно самым быстрым, поскольку оно записывает полные блоки данныхдаже для небольших изменений?
Обновление : Чтобы прояснить ситуацию, вот выдержка из такого документа:
{
"_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
.