Самый длинный поиск префикса с диска
В настоящее время у меня есть некоторая реализация, которая выполняет Longest Prefix Lookup (LPM) из структуры данных радикального дерева. Эта структура данных содержит префиксы IP (основополагающее дерево с максимальной глубиной 128 бит), и в настоящее время она полностью сохраняется в памяти. Данные доступны только для чтения и никогда не изменяются.
К сожалению, данные стали больше, и я больше не могу хранить их в памяти. Я ищу эффективную структуру данных, которая может быть сохранена на диске и обеспечит эффективный поиск. Я планирую использовать какой-то механизм кэширования поверх этого.
1 ответ
эффективная структура данных, которая может храниться на диске и обеспечивает эффективный поиск
Похоже, проблема XY для меня:
- Мы говорим об IPv6 (128 бит).
- Мы говорим о маршрутизации IPv6 (Longest Prefix Match).
- Для соединения со скоростью 10 Гбит / с может быть до 14,8 миллионов поисков маршрута в секунду.
- Согласно общедоступным данным, на данный момент существует около 50 тыс. Префиксов IPv6.
Если вышеприведенные предположения верны, нам нужно хранить 50К раз 128 бит = 800КБ в радикальном дереве. Это должно легко вписаться в память.
Нам нужно искать эти данные миллионы раз в секунду. Размещение данных на диске замедляется на порядок.
Я думаю, что ваш вопрос не является коренной проблемой, поэтому, пожалуйста:
- Включите информацию о более широкой картине вместе с любым попытанным решением.
- Если есть другие решения, которые вы уже исключили, расскажите, почему вы их исключили. Это дает больше информации о ваших требованиях.
ОБНОВИТЬ:
Таким образом, это 2M просмотров IPv6 в час через 20M только для чтения набора префиксов IPv6. Мы до сих пор не знаем, что это за префиксы 20M, так как с практической точки зрения префиксов во всем Интернете не так много. Но в любом случае.
2M просмотров / час составляет ~550 просмотров / сек. Согласно Википедии, традиционные (механические) жесткие диски не могут выдержать такую нагрузку. Поэтому нам нужен SSD-накопитель для хранения базы данных.
Согласно Википедии, B-деревья являются хорошими структурами для внешнего поиска.
Согласно Википедии, файлы с отображением в памяти используют небольшие объемы ОЗУ даже для очень больших файлов.
Собираем все биты вместе. Эти 20M префиксы IPv6 должны быть организованы как B-дерево с размером узла PAGE_SZIE
(обычно 4 КБ) и отображается в виртуальном адресном пространстве процесса. Кеш будет управляться операционной системой, поэтому никакого другого механизма кеширования не требуется.