标签:tool contain 编解码 架构 数据存储 节点 数据库 lazy rest
源文件:https://wiki.opendaylight.org/view/OpenDaylight_Controller:MD-SAL:Architecture:DOM_DataStore#The_In-Memory_MD-SAL_Data_Store_Implementation
问题描述
在MD-SAL数据存储和数据存储本身的当前实现中,存在几个有关数据结构问题:
为了提高MD-SAL的可靠性和性能,上述问题需要解决。
当前MD-SAL DOM数据代理
目前,DOM数据代理没有被设计成具有树状结构的智能内存缓存,其能够记录依赖性,计算变化集合并维护提交处理程序、通知监听器和实际数据之间的关系。 这可能导致两阶段提交的低效实施,其中所有状态记录由Data Broker本身完成,如下所示:
DOM数据代理保留和维护的状态是:
另外,现在DOM数据代理的职责是:
异步读取
大多数MD-SAL API是异步的--有一个例外是用于读取*数据操作,这个操作比较快。 当引入额外的读取*数据用例时,例如懒编解码生成,提供读取操作的远程系统(Netconf),支持多个读取器和集群,这个速度就会慢下来。
所提出的改变是使DataReader约束也是异步的,这允许读取链接,并允许调用者线程在读取期间不被阻塞。 这将导致更简洁的并发模型。
需求
交易
在交易期间一致的数据存储视图:
我们需要做什么
建议的变更
新规范化数据树模型
新规范化模型将代表YANG规范背后的实际理念。 它将不再基于序列化格式(如YANG规范中定义并由sal-broker-impl 1.0使用)。
NormalizedNode - 表示树结构中的节点的基本类型;所有其他节点类型都是从此基本类型派生的。它包含一个叶子标识符和一个值。
DataContainerNode - 包含多个叶子的节点;它在YANG语法中没有直接的表示。
ContainerNode - 节点,表示每个父节点只能有一个;它包含多个叶子,并映射到YANG中的容器语句。
MapEntryNode - 表示叶子的节点,可以出现多次。 MapEntryNode可能包含多个叶子。 MapEntryNode映射到YANG中的列表List实例。
ChoiceNode - 代表叶子的节点,每个父节点大多出现一次,但可能的值可能有不同的类型。映射到选择语句choice。类型映射到该选择的案例语句。
AugmentationNode - 表示叶子的节点,每个父节点大多发生一次。
LeafNode - 表示叶子的节点,每个父节点大多出现一次。包含简单的值。
LeafSetEntryNode - 表示叶子的节点,每个父节点可以多次出现该类型的节点。映射到YANG中的叶子列表的实例。
LeafSetNode - 特殊节点,每个父节点只能出现一次;其叶子是指定类型的LeafSetEntryNode节点。
MapNode - 特殊节点,每个父节点只能出现一次;其叶子是MapEntryNode节点。
当前模型不提供InstanceIdentifier和Data Store之间的绑定。 在该建议中通过定义InstanceIdentifier中的路径参数与数据树节点之间的关系来解决此问题。
请参阅OpenDaylight_Controller:MD-SAL:Design:Normalized_DOM_Model
提出的API的代码在:http://git.opendaylight.org/gerrit/5441
对现有组件的影响
此建议将影响执行 perform schema aware data normalization 的组件:
Yangtools
yang-data-impl - XmlDocumentUtils - Netconf工具使用的一组实用程序和编解码器,用于根据提供的Schema将输入XML归一化为yang-data-api
binding-generator-impl - LazyGeneratedCodecRegistry - 从Java DTO到yang-data-api的运行时生成的编解码器
Controller
sal-rest-connector RestconfContext - 将输入json / xml转换为中间格式,使用Schema上下文进行规范化;
sal- * DataBroker - 统一Java DTO和yang-data-api之间的概念,定义正确的格式将提高数据代理的代码可重用性,可读性和性能;
DataStore - 数据存储实现将受益于规范化数据模型,这将导致更有效的实现
这些组件将被修改为使用新的规范化数据模型(提供更有效的API)。
新组件
内存数据库/缓存
新的DOM数据代理的契约和部署模型将假定存在内存数据库(缓存),它将从以下职责中代替DOM数据代理:
【译】OpenDaylight控制器:MD-SAL架构:DOM DataStore
标签:tool contain 编解码 架构 数据存储 节点 数据库 lazy rest
原文地址:http://www.cnblogs.com/FrankZhou2017/p/7308428.html