一种内部nosql数据库订阅发布机制的设计

内部nosql数据库订阅发布机制

本篇文章主要介绍我们内部的nosql 数据库 wdb实现了内部订阅发布机制的实现细节
两个进程:Switch_process wdb_process
Switch_process 订阅 wdb_process的数据, 当数据发生改变后发布给switch_process

订阅/发布机制 跟网络通信中的组播有很大的相似之处,数据源通过组播表到底客户端, 例如组播组224.0.0.0 发到这个组的数据 ,会发送给全部直连的设备, 而其他组播组会查询组播表,根据表里面的注册对象进行发送。 软件的原理是相通的。

Created with Raphaël 2.2.0 数据源 代理 确认是否在组播组(订阅组)? 客户端 1 2 3 yes

订阅

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去做相应的发布处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值