Соответствие записей в режиме реального времени - PullRequest
1 голос
/ 20 августа 2011

Вот что я пытаюсь достичь: я отправляю несколько пакетов по сотовым сетям.Я также нюхаю трафик, чтобы проверить ответ на эти пакеты.Ответ может прийти где угодно в пределах 10-часового окна.

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

Я могу создать хэш-карту и поместить в нее каждый отправленный пакет в режиме реального времени и сопоставить его с ответом при его возврате.В этот момент запись карты has либо остается в hashmap, либо удаляется (после ответа).

Итак, теперь вопрос: каков наилучший способ добиться этого, учитывая, что отправлено 2000 пакетовкаждую минуту?Будет ли хешмап достаточно надежным?Как насчет времени поиска?

Ответы [ 4 ]

2 голосов
/ 20 августа 2011

Я не думаю, что HashMap сам по себе будет достаточно надежным, так как он не является поточно-ориентированным. Я бы попробовал ConcurrentHashMap .

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

0 голосов
/ 20 августа 2011

HashMap является «надежным» (в том смысле, что он работает).Еще одним соображением является память устройства.

Давайте посмотрим: 10 часов * 60 минут / час * 2000 пакетов / минуту = 1.200.000.Для HashMap это означает как минимум 2.400.00 указателей, в 32-битной архитектуре 9.600.000 байт.Просто для структуры HashMap, при условии отсутствия коллизий (дополнительные 4 байта на коллизии) и исключая размер самих данных (ключей и значений).Память будет проблемой.

В зависимости от времени, это зависит от того, сколько берутся функции equals () и hashCode (), а также от количества коллизий в HashMap (количество коллизий == numerвыполнения равных, более или менее).Без этих данных невозможно рассчитать.

0 голосов
/ 20 августа 2011

Если у вас достаточно памяти, у вас не должно быть проблем, при условии, что метод hashCode ключей карты написан правильно и позволяет распределить потенциальные 1 200 000 ключей с как можно меньшим количеством коллизий.HashMap - это O (1).

Но память может быть проблемой.В худшем случае на вашей карте будет 120000 записей.Если каждый из них занимает 400 байтов (что не так много, но я не знаю, что содержат ваши пакеты), вам уже нужно 460 МБ.

0 голосов
/ 20 августа 2011

Хеш-карта будет достаточно надежной. При 2000 отправленных в минуту пакетов и среднем времени ответа 5 часов вы можете получить 600 000 ожидающих пакетов. Предполагая, что у вашего устройства достаточно памяти для хранения пакетов, и вы выделяете достаточно большую хеш-таблицу (скажем, 600 000 с коэффициентом загрузки 0,75), тогда поиск будет очень быстрым.

Посмотрите на javadoc для HashMap для получения более подробной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...