内部nosql数据库订阅发布机制
本篇文章主要介绍我们内部的nosql 数据库 wdb实现了内部订阅发布机制的实现细节
两个进程:Switch_process wdb_process
Switch_process 订阅 wdb_process的数据, 当数据发生改变后发布给switch_process
订阅/发布机制 跟网络通信中的组播有很大的相似之处,数据源通过组播表到底客户端, 例如组播组224.0.0.0 发到这个组的数据 ,会发送给全部直连的设备, 而其他组播组会查询组播表,根据表里面的注册对象进行发送。 软件的原理是相通的。
订阅
1: wdb_pm_subscribe_tbl(TBL_ARPINSP, brg_vlan_cmd_arpinsp_enable_sync, NULL);
TBL_ARPINSP =187 此处就为订阅号,根据函数定义我们知道,此处只是把数据订阅数据后执行的函数添加到全局静态数据列表。
typedef int32 (*wdb_SUBSCRIBE_TBL_FUNC)(wdb_node_t* p_tbl_node, wdb_node_t* p_ds_node, uint32 oper, uint32 field_id, void *p_tbl, void *p_ds);
Typedef 一种用法:为复杂的声明定义一个别名。
static wdb_SUBSCRIBE_TBL_FUNC g_pm_tbl_sub_before_fn[TBL_MAX];
int32
wdb_pm_subscribe_tbl(wdb_tbl_t tbl_id, wdb_SUBSCRIBE_TBL_FUNC before_fn, wdb_SUBSCRIBE_TBL_FUNC after_fn)
{
if (tbl_id >= TBL_MAX)
{
return PM_E_INVALID_PARAM;
}
g_pm_tbl_sub_before_fn[tbl_id] = before_fn;
g_pm_tbl_sub_after_fn[tbl_id] = after_fn;
return PM_E_NONE;
}
2: 发布
当数据发生改变的时候,调用
wdb_store_data(wdb_node_t* p_tbl_node, wdb_node_t* p_ds_node, wdb_node_t* p_ds2_node, ctc_msg_t *p_msg)
进行数据的同步:
/* 2. before store sync process */
g_pm_ds_sub_refer_before_fn[p_ds_node->id](p_tbl_node, p_ds_node, oper, field_id, p_tbl, p_ds, p_refer);
根据先前注册的执行函数进行相应的处理。
总结下来就是订阅时候设置好 订阅表的id, 保存处理函数, 在数据改变来的时候根据数据表的id去做相应的发布处理。