基于ongdb的时间序列数据存储设计

 

Here’s the table of contents:

  1. 需求内容:
  2. 设计背景
  3. 三维图数据随时间序列变化的示例结构
  4. 时间粒度
  5. 存储原则
  6. 关系时间序列存储
  7. ONgDB支持的数据规模
  8. 标签时间序列存储

需求内容:

公司画像存储/人物画像存储等【实现任意时间切片下研究主体的标签关系属性穿透分析】。

设计背景

通过标签的任意组合归类实体进行关系分析,最高效的方式是通过图数据库的标签进行实现。这里的标签类似现有的拍平指标,现有的拍平指标存储在ES。如果要实现在某个时间点对某类拍平指标进行相关性分析是很难的。 关联时序的标签设计可以在空间上区分归类实体,将关系网络映射在一个三维空间中,可以方便的提取某个时间片上的关系网络。

三维图数据随时间序列变化的示例结构

// 数据只能新增和过期,但是不删除【事实数据一定要完整保留,过期数据通过时间查询过滤】【分析时拿指定时间最近的数据】
数据模型:(HORGShareHoldV002)-[持股]->(HORGShareHoldV002)
行业标签:[金融公司:金融公司_YYYY:金融公司_YYYYMM:金融公司_YYYYMMDD]
评级标签:[风险评级下调为B:风险评级下调为B_YYYY:风险评级下调为B_YYYYMM:风险评级下调为B_YYYYMMDD]
# 下列结构表示TIME1~TIME5标签随着时间的演变,随着标签的丰富可支持的查询也更加灵活
# 时 #
# 间 #
# ↓↓ #
TIME1【只包含图数据模型标签】:(HORGShareHoldV002)-[持股]->(HORGShareHoldV002)-[持股]->(HORGShareHoldV002)
TIME2【第一个节点增加行业标签】:(HORGShareHoldV002:金融公司)-[持股]->(HORGShareHoldV002)-[持股]->(HORGShareHoldV002)
TIME3【最后一个节点增加评级标签】:(HORGShareHoldV002:金融公司)-[持股]->(HORGShareHoldV002)-[持股]->(HORGShareHoldV002:风险评级下调为B:风险评级下调为B_2021:风险评级下调为B_202101:风险评级下调为B_20210127)
TIME4【第一个节点行业标签增加时间序列】:(HORGShareHoldV002:金融公司:金融公司_2021:金融公司_202101:金融公司_20210127)-[持股]->(HORGShareHoldV002)-[持股]->(HORGShareHoldV002:风险评级下调为B:风险评级下调为B_2021:风险评级下调为B_202101:风险评级下调为B_20210127)
TIME5【第一个节点增加时间序列的行业标签】:(HORGShareHoldV002:金融公司:金融公司_2021:金融公司_202101:金融公司_20210127:担保公司:担保公司_2021:担保公司_202101:担保公司_20210128)-[持股]->(HORGShareHoldV002)-[持股]->(HORGShareHoldV002:风险评级下调为B:风险评级下调为B_2021:风险评级下调为B_202101:风险评级下调为B_20210128)

时间粒度

标签—年月日 【200类标签30年的时间跨度,标签数量大约为224万】【1000类标签6年时间跨度,标签数量大约为224万】【2000类标签6年时间跨度,标签数量大约为224万】 2000 + 200010 + 20001012 + 2000101230 2000 + 20000 + 240000 + 240000*s 关系—年月日时分秒

存储原则

  1. ongdb主要存储标签、关系和必要的属性信息;
  2. 集成的mysql和es存储文本类属性数据和较大的时间序列JSON串,例如新闻文本、时间频率较高的数据等,通过编码关联;文本类检索通过es实现。

关系时间序列存储

  1. JSON串【[{},{},{}]】
  2. 拍平的存储普通属性

ONgDB支持的数据规模

  • 节点数量【无限制】
  • 关系数量【无限制】
  • 关系类型【1600万】
  • 节点标签【无限制】
  • 节点与关系属性【无限制】

标签时间序列存储

【Label、Label_2021、Label_202101、Label_20210127】 例如今天给公司打上标签‘风险评级下调为B’,则这个主体在图库中拥有的标签就是: 【风险评级下调为B、风险评级下调为B_2021、风险评级下调为B_202101、风险评级下调为B_20210127】 标签只新增不修改,只要事实标签发生就必须保存下来。支持后续的更多数据分析需求。

// 不同行业公司的持股网络查询
// 查询担保公司和金融公司之间的持股网络
MATCH (n:HORGShareHoldV002:担保)-[r:持股]->(m:HORGShareHoldV002:金融公司) RETURN r.shareholding_detail LIMIT 25
// 不同行业并且2021年01月风险评级下调为B的公司持股网络查询
// 查询担保公司和金融公司2021年01月风险评级下调为B的公司之间的持股关系网络,在FILTER中过滤当时公司之间的持股关系
MATCH (n:HORGShareHoldV002:担保:风险评级下调为B_202101)-[r:持股]->(m:HORGShareHoldV002:金融公司:风险评级下调为B_202101) WHERE FILTER(r.shareholding_detail...) RETURN p LIMIT 25
// 在北京的不同行业并且2021年01月风险评级下调为B的公司持股网络查询
// 查询位于北京的担保公司和金融公司2021年01月风险评级下调为B的公司之间的持股关系网络,在FILTER中过滤当时公司之间的持股关系
MATCH (n:HORGShareHoldV002:担保:风险评级下调为B_202101:北京)-[r:持股]->(m:HORGShareHoldV002:金融公司:风险评级下调为B_202101:北京) WHERE FILTER(r.shareholding_detail...) RETURN p LIMIT 25
// 在北京的不同行业并且2021年01月风险评级下调为B的公司持股网络和担保网络查询
// 查询位于北京的担保公司和金融公司2021年01月风险评级下调为B的公司之间的持股关系网络和担保网络,在FILTER中过滤当时公司之间的持股担保关系
MATCH (n:担保:风险评级下调为B_202101:北京)-[r:持股|:担保]->(m:金融公司:风险评级下调为B_202101:北京) WHERE FILTER(r.shareholding_detail...) RETURN p LIMIT 25