Я нашел следующую информацию здесь .
Модуль snmp_index реализует абстрактный тип данных (ADT) для структуры индекса SNMP для таблиц SNMP. Он реализован в виде таблицы ets типа данных order_set, что означает, что все операции выполняются за O (log n). В таблице ключ является ИДЕНТИФИКАТОРОМ ОБЪЕКТА ASN.1.
Этот индекс используется для отделения реализации порядка SNMP от фактической реализации таблицы. Порядок SNMP, то есть реализация GET NEXT, реализован в этом модуле.
Например, предположим, что есть таблица SNMP, которая лучше всего реализована в Erlang как один процесс на строку таблицы SNMP. Предположим далее, что INDEX в таблице SNMP является строкой октетов. Структура индекса будет создана следующим образом:
snmp_index:new(string)
Для каждого нового процесса, который мы создаем, мы вставляем элемент в структуру snmp_index:
new_process(Name, SnmpIndex) -> Pid = start_process(), NewSnmpIndex = snmp_index:insert(SnmpIndex, Name, Pid), <...>
С помощью этой структуры теперь мы можем отобразить ИДЕНТИФИКАТОР ОБЪЕКТА, например, в запросе GET NEXT, на правильный процесс:
get_next_pid(Oid, SnmpIndex) -> } = snmp_index:get_next(SnmpIndex, Oid), Pid.
В заключение, исходя из информации, которую я знаю, и информации, предоставленной в предыдущей цитате, я считаю, что индексы SNMP не следует изменять из-за того факта, что это противоречит цели индекса (исправьте меня, если я ошибаюсь).
ОБНОВЛЕНИЕ: На мой взгляд, индекс SNMP похож на индекс базы данных, но он индексирует сетевые устройства для справки. Единственный раз, когда этот индекс должен измениться, это когда оборудование удалено или добавлено. Вы не хотели бы, чтобы ваши индексы базы данных изменились в существующей записи, потому что это может вызвать дублирование или другие проблемы. Может быть, кто-то может пролить свет на этот вопрос с другим ответом или комментарием. Я много знаю о работе в сети, но я никогда не слышал об изменениях в SNMP. Я гуглил это около часа и не придумал ничего очень полезного, кроме уже упомянутой веб-страницы и вики-страницы .