查看源代码 snmpa_local_db (snmp v5.18)
SNMP 内置数据库
模块 snmpa_local_db
包含使用 SNMP 内置数据库实现表(和变量)的函数。数据库存在两个实例,一个易失性实例和一个持久性实例。易失性数据库使用 ets 实现。持久性数据库使用 dets 实现。
此数据库存在一个伸缩性问题。
- 对于大型表,插入和删除效率低下。
这个问题最好使用 Mnesia 来解决。
以下函数描述了 snmpa_local_db
的接口。每个函数都有一个 Mnesia 等效项。参数 NameDb
是一个元组 {Name, Db}
,其中 Name
是被管理对象的符号名称(如 MIB 中定义),Db
是 volatile
或 persistent
。mnesia
是不可能的,因为所有这些函数都是 snmpa_local_db
特有的。
常用数据类型
在下面定义的函数中,适用以下限制
Db = volatile | persistent
另请参阅
ets(3), dets(3), snmp_generic(3)
摘要
函数
-spec dump() -> ok | {error, Reason} when Reason :: term().
此函数可用于手动将数据库转储到文件。
-spec match(Table, Pattern) -> [Match] when Table :: snmpa:name_db() | snmpa:name(), Pattern :: ets:match_pattern(), Match :: term().
对表执行 ets/dets 匹配。
有关 Pattern
和返回值的说明,请参阅 ets:match/2
。
-spec print() -> term().
等效于 print/2
。
-spec print(Table) -> term() when Table :: snmpa:name().
等效于 print/2
。
-spec print(Table, Db) -> term() when Table :: snmpa:name(), Db :: volatile | persistent.
在屏幕上打印数据库的内容。这对于调试很有用,因为 STANDARD-MIB
和 OTP-SNMPEA-MIB
(以及可能您自己的 MIB)存储在 snmpa_local_db
中。
Table
是数据库中表的原子。当未提供名称时,将显示整个数据库。
请注意,这些函数实际上不使用 io:format/2 打印,而是(仅)返回信息。如果在 shell 中执行,则信息将显示(可能会被截断)在那里。
更好的用法是
io:format("~p~n", [snmpa_local_db:print()]).
-spec table_create(Table) -> boolean() when Table :: snmpa:name_db() | snmpa:name().
创建表。如果表已存在,则旧副本将被销毁。
如果 NameDb
参数指定不正确,则返回 false
,否则返回 true
。
数据库(仅指定表名)默认为 volatile
。
-spec table_create_row(Table, RowIndex, Row) -> boolean() when Table :: snmpa:name_db() | snmpa:name(), RowIndex :: snmp:row_index(), Row :: tuple().
在表中创建一行。Row
是一个元组,包含所有列的值,包括索引列。
数据库(仅指定表名)默认为 volatile
。
-spec table_delete(Table) -> true when Table :: snmpa:name_db() | snmpa:name().
删除表。
数据库(仅指定表名)默认为 volatile
。
-spec table_delete_row(Table, RowIndex) -> boolean() when Table :: snmpa:name_db() | snmpa:name(), RowIndex :: snmp:row_index().
删除表中的行。
数据库(仅指定表名)默认为 volatile
。
-spec table_exists(Table) -> boolean() when Table :: snmpa:name_db() | snmpa:name().
检查表是否存在。
数据库(仅指定表名)默认为 volatile
。
-spec table_get_element(Table, RowIndex, Col) -> {value, Value} | undefined when Table :: snmpa:name_db() | snmpa:name(), RowIndex :: snmp:row_index(), Col :: snmp:column(), Value :: term().
从表的行中获取列值(元素)。
数据库(仅指定表名)默认为 volatile
。
此函数已经存在很长时间,但没有正确的 since 标签,因此为了简化,我们将 since 标签设置为记录它的时候。
-spec table_get_row(Table, RowIndex) -> Row | undefined when Table :: snmpa:name_db() | snmpa:name(), RowIndex :: snmp:row_index(), Row :: tuple().
Row
是一个元组,包含所有列的值,包括索引列。
数据库(仅指定表名)默认为 volatile
。
-spec table_set_elements(Table, RowIndex, Cols) -> boolean() when Table :: snmpa:name_db() | snmpa:name(), RowIndex :: snmp:row_index(), Cols :: [{Col, Value}], Col :: snmp:column(), Value :: term().
更新此表中指定行的列对象。
数据库(仅指定表名)默认为 volatile
。
此函数已经存在很长时间,但没有正确的 since 标签,因此为了简化,我们将 since 标签设置为记录它的时候。