Pull to refresh

Comments 7

Он отнаследован от SetMultimap, метод get() которого возвращает множество значений. Вот если бы был метод, который накладывал constraint на весь BiMultimap и возвращал view, типа BiMultimap, значения которого имеют данный ярлык, то да, эта функциональность меня бы устроила.
я тоже первым делом подумал про BiMultimap, а ответа не понял — какого именно метода не хватает?
put и getValues тривиально
findValues(List labels) — Multimaps.filterValues(objectToLabel, Predicates.in(labels)).getKeys()
и т.п.
Поизучал, как работают предикаты и Multimaps.filterValues(): получается, что последовательно (с помощью Predicates.AndPredicate.apply()) накладывает условие на ярлыки по всем элементам коллекции для каждого ярлыка из запроса.

Т.е. если у нас в среднем m ярлыков в запросе, в среднем n ярлыков для каждого объекта в коллекции, и k объектов в коллекции, то временная сложность алгоритма итерирования по Multimaps.filterValues().values() будет O(k*m) (если принимаем, что Set.contains() имеет сложность O(1))

В моем же случае уже есть предрасчитанный bitmap index, который сводит временную сложность к O(m + k).
Согласен! Вопрос, как обычно, в том важно ли это =)

Вы не писали, зачем вы это делаете — для прод системы? Логичнее было бы БД использовать. В любом случае распределенная система по-хорошему нужна.
Для прод системы: есть много устройств в сети, которым надо обращаться, у каждого есть набор уникальных свойств/фич, этим свойствам присвоены лейблы.

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

Есть динамическое удаление устройства (например, выходит из строя, или проблемы с сетью). Но пока это редкое событие, поэтому удаление не реализовывал (потребуется перестроение bitmap-индексов), а удаленные устройства отфильтровываю по флажку недоступности.

Если бы использовал БД, то это лишние лаги и введение лишних точек отказа (линк до бд, да и сама бд).
Кстати, BiMultimap не входит в релизную ветку гуавы, соответственно та версия, которая, например, через мавен к моему проекту подтягивается, не имеет этой функциональности.
Sign up to leave a comment.

Articles