|
Можно ли в NoSQL БД как-то синхронизировать изменения?
|
|||
---|---|---|---|
#18+
Доброго времени суток. Попытаюсь сформулировать свой вопрос на некотором примере, для наглядности... Предположим, что я хочу создать сайт, на котором бы общались жители дома, в котором я живу. Общение на тему решения различного рода вопросов, так или иначе связанных с нашим домом (как вариант). Предположим так же, что я решил back-end писать на JavaScript и в качестве БД взять MongoDb, с которой буду взаимодействовать через Mongoose. Ключевым моментом здесь является то, что MongoDb является NoSQL БД. На каждом этаже дома имеется некоторое количество квартир. В каждой квартире имеется некоторое количество её владельцев. Т.е. тут, с одной стороны, напрашивается такая структура JSON (с моей точки зрения): Код: json 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Но вот что, если человек владеет в доме более чем одной квартирой? Тогда получается, что информация о нём будет в таком JSON дублироваться и в случае необходимости внесения правок в информацию о нём (например, смена номера телефона или email), придётся искать его везде с целью синхронизации изменений. Как подобные кейсы решаются в MongoDb и ей подобных нереляционных БД? Я понимаю, что можно написать отдельные функции, которые будут после изменений выполнять проверку всех существующих записей и дополнительно вносить правку там, но если со временем юзер начнёт фигурировать где-то ещё, то нужно будет не забывать править логику этой функции, что не есть хорошо, т.к. с высокой долей вероятности об этом могут и не вспомнить, а всплывёт это спустя некоторое время в виде рассинхрона информации). P.S. Как вариант, мне приходит на ум в apartmentOwners хранить не саму информацию о владельце квартиры, но только его Id, а информацию о человеке хранить в отдельной коллекции документов, например - Users. Но тогда возникает другая проблема: если потребуется из Users удалить человека, то нужно будет "прошерстить" все квартиры и из их массива apartmentOwners удалить все Id этого человека. Т.е. всё это подвержено ошибкам аля "человеческий фактор" (где-то в коде можно забыть добавить логику чистки или написать её не вполне корректно). В случае использования реляционной БД, таких проблем у меня бы не возникло, но мне интересно, как подобное решается в NoSQL (если вообще решается)? Спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2020, 13:36 |
|
Можно ли в NoSQL БД как-то синхронизировать изменения?
|
|||
---|---|---|---|
#18+
Compositum Как подобные кейсы решаются в MongoDb и ей подобных нереляционных БД? Именно так они и решаются: информация дублируется. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2020, 15:07 |
|
Можно ли в NoSQL БД как-то синхронизировать изменения?
|
|||
---|---|---|---|
#18+
Compositum как подобное решается в NoSQL (если вообще решается)? С MongoDB надо серъёзно подходить к Schema design. Продумывать то, где использовать reference, а где embedded document. На эту тему не одна статья написана: mongodb embedded vs reference . В вашем примере действительно возможно полную информацию о человеке хранить в отдельной коллекции, а в списке квартир только минимально необходимое количество атрибутов, включая идентификатор. Это так называемый Subset Pattern . Также на практике выходит, что схема базы в MongoDB за счёт того, что её легко менять при развитии системы, гибко подстраивается под логику приложения и особых проблем не возникает. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2020, 16:59 |
|
|
start [/forum/topic.php?fid=48&fpage=2&tid=1856553]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 15ms |
total: | 141ms |
0 / 0 |