Атомарный вероятностный подсчет и членство в наборе в MongoDB

Я хочу выполнить вероятностный подсчет и установить членство, используя такие структуры, как фильтры Блума и гиперлоглог. Я предполагаю, что могу хранить такие структуры как двоичные данные, но я не хочу использовать оптимистическую блокировку (также известную как обновить, если актуально), потому что разногласия высоки.

Есть ли какая-либо поддержка для использования таких структур данных и выполнения операций с ними атомарно на стороне сервера, с помощью определяемых пользователем функций и т.п.? Или как мне добавить расширения с такой функциональностью?

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


person Daniel Siegmann    schedule 28.04.2015    source источник
comment
Звучит как пример использования Redis... Почему MongoDB?   -  person mnemosyn    schedule 28.04.2015
comment
Я оцениваю несколько баз данных, в том числе Redis. Я никогда раньше не использовал MongoDB — я бы не хотел исключать это только потому, что не знал о некоторых функциях.   -  person Daniel Siegmann    schedule 29.04.2015


Ответы (1)


Я не специалист по MongoDB, но мне кажется, что HyperLogLog (и фильтр Блума тоже) можно хранить в массиве внутри документа. Единственная операция, которая действительно нужна им обоим, это $max, то есть атомарная (я думаю).

Вам не нужно обновлять весь документ, только позицию массива, на которую влияет один элемент.

person Juan Lopes    schedule 01.05.2015