Обработка счетчиков с помощью MongoDB

Я всегда использовал транзакционные базы данных, которые упрощают такие вещи:

Таблица City содержит столбец с именем populationCount, который обновляется каждый раз, когда Person с этим city_id добавляется / удаляется.

Как это сделать с нетранзакционной базой данных, такой как MongoDB? Предположим, что коллекция Person содержит миллионы документов: всегда ли мне запрашивать подсчет населения или есть простой способ сохранить populationCount в City? Я видел пример транзакции на веб-сайте MongoDB, но здесь говорится о классическом примере перевода денег из пункта А в пункт Б. Я надеюсь, что моя проблема намного проще.


person Guido Lodetti    schedule 23.11.2016    source источник
comment
Должен ли подсчет населения города быть точным на 100%?   -  person RayCW    schedule 23.11.2016
comment
Это было бы чудесно. В противном случае я бы просто использовал $inc в City документе.   -  person Guido Lodetti    schedule 23.11.2016
comment
«Приятно иметь» - это не то же самое, что «обязательно иметь».   -  person RayCW    schedule 23.11.2016
comment
Это правда. Мне даже не нужно собирать население какого-либо города, я просто хочу узнать и придумал возможную ситуацию. Хороший означает Я хочу найти решение для самой сложной ситуации, но вы можете указать мне другие способы достижения того же результата.   -  person Guido Lodetti    schedule 23.11.2016
comment
Ладно, значит, за тобой не стоит кричащий менеджер :)   -  person RayCW    schedule 23.11.2016
comment
@GuidoLodetti: То, что я понимаю человеком, - это коллекция, в которой содержится документ, касающийся каждой детали человека, а также добавление и удаление документов из коллекции людей. Итак, это означает, что общее количество документов в коллекции человека - это общая численность населения, поэтому вы можете рассчитать население с помощью db.collection.count ()   -  person Simran    schedule 23.11.2016


Ответы (1)


Является ли проблема, когда количество населения города на единицу меньше, чем реальное количество населения этого города в коллекции Persons?

Если да, то вы можете использовать ReaderWriterLock в своем приложении. Это означает, что только один поток может выполнять запись одновременно, вы пишете документ в коллекцию лиц, и вы увеличиваете количество населения в городе коллекции, и не будет чтения, когда идет запись, но когда запись не происходит, все потоки желающие читать могут читать одновременно.

person RayCW    schedule 23.11.2016