Фильтр Блума для хранения только последних 50 данных - PullRequest
5 голосов
/ 12 февраля 2012

Привет, в моей системе будет один главный узел и n номеров подчиненных узлов, где главный узел будет передавать входящий запрос одному из своих подчиненных узлов. Чтобы использовать содержимое кэш-памяти, я хочу отслеживать последние 50 запросов (хэш входящего запроса), которые подчиненный узел уже обслуживал (при условии, что последние 50 запросов уже будут в кэш-памяти, так что узел будет обслуживать запрос быстро). Насколько я изучал, удаление трудно в фильтре Блума. Но это также может быть сделано путем подсчета фильтра. Действительно ли возможно сохранить фильтр Блума как движущееся окно (например, после 50 запросов его следует удалить из внешнего интерфейса для размещения нового запроса). Это действительно возможно сделать так или есть какой-либо другой фильтр, например, фильтр Блума (который должен быть достаточно быстрым, чтобы проверить наличие элемента).

1 Ответ

5 голосов
/ 12 февраля 2012

Если у вас есть всего 50 вещей, которые вы отслеживаете, я не думаю, что фильтр Блума является подходящей структурой данных.Фильтры Блума хороши, когда у вас огромное количество данных, которые нельзя хранить в памяти, и вы хотите выполнить предварительную фильтрацию, чтобы исключить ненужные поиски в некоторой удаленной структуре данных, такой как удаленная база данных.Если у вас всего 50 элементов, вам почти наверняка лучше использовать что-то вроде хеш-таблицы для хранения этих значений, поскольку вы можете получить точные ответы за ожидаемое время O (1) с минимальными затратами пространства.

ЕслиВы хотите отследить последние 50 элементов, которые вы видели, подумайте о том, чтобы заглянуть в связанную хэш-таблицу, которая поддерживает вставку, поиск, удаление и удаление самого старшего за время O (1).LinkedHashMap у Java должно быть великолепным.

Надеюсь, это поможет!

...