数据标签设计 -- 大数据平台(XSailboat)的数据标签模块

1. 背景

近期手头的一个项目需要对数据进行大标签。原先就有在大数据平台XSailboat中增加“数据标签”模块的设想,现在有这样的需求,正好趁此机会将其实现。

增加数据标签以后,平台将有以下模块:

  • 数据集成
  • 指标建模
  • 数据标签
  • DataStudio
  • 任务发布
  • 任务运行
  • 数据服务
  • API网关
  • 数据地图
  • 数据资产目录
  • 数据可视化
  • XTaskWorks
  • 应用引擎
  • 消息中心
  • 平台运维中心
  • 帮助中心

将平台内部的模块协作、配合起来,独立又相互支撑,一直是我设计大数据平台,引入模块的一个的原则。

2. 概念和规则

  • 标签分类。标签分类对数据标签以树形结构进行分类管理。
  • 标签分组。标签分组是一种特化的标签分类。标签分组下面只能有标签,不能有标签分类。标签分组可以添加标签约束。标签约束包括:一个对象只能绑定此标签分组下的一个标签(如果已经有一个,再添加另一个,将添加新的,移除旧的);一个对象可以绑定此标签分组下的多个标签。
  • 数据标签。数据标签名不能重复。

何为数据标签?
首先它是一段附加信息,用以描述一个对象集合中对象的某一方面特性。将“某一方面”用一个“标签分组”来表示。特性的取值应该是离散的,可枚举的。
其次数据标签应该是“附加的”,可以后期按需增加的。即发现某一方面具有价值的特性,就可以定义一组标签来给对象打标签。因此最好使用关联来表示,以避免侵入被描述对象的存储表。

3. 功能设计

数据标签的功能定位为可以给平台内的对象打标签。这里的对象指的是在一定范围内可以用一个唯一标识(id)代表这个对象,并且这个对象具有业务上的实体含义。

因为大数据平台融汇有各种来源的数据,要求对象id在全局范围内唯一有时是不能保证的。为此我们将一个“标签-对象”绑定,用下面的一个元组来表示:

(标签id , 对象id,数据源id,数据定位路径)

举例,在一个关系数据库(数据源id:ds123)里面(数据库名:hr),员工表(employe)中有一个名为A001的员工,给它打一个 “能力突出”(标签id: l1)的标签:

(l1 , A001 , ds123 ,  /hr/employe)

这样做不仅能预防对象id冲突,而且具有了对象定位的能力,可以用一个通用接口,根据这个元组,取得对象的详细信息。

”对象-标签“绑定数据是通过元组(关联表)存储的,这就带来了一个问题:
当对象被删除的时候,关联关系还在关联表中存在,时间长了会积累一大批脏数据

大数据平台通过定义数据源的方式,引入了各种来源的数据,当源端删除了打标对象,并不会通知大数据平台。所以大数据平台需要引入一种定时清理机制。借助“数据源Id”、“数据定位路径”、"对象id,定时清理任务就能知道,打标签对象是否依然存在。发现不存在,就可以从关联表中删除“标签-对象”的关系。
这种清理任务,并不需要太过频繁运行,每天凌晨扫描一次即可。

4. 规则调整

这是在后补记录,原先的内容就不修改了。

在应用过程中,发现一个问题。场景:
标签树:

- 量测
  - 开关量
    -  故障
      . 双回路电源故障
      . 一路电源故障
  - 模拟量
    -  电压
      . 电压
      . A相电压
      . B相电压
      . C相电压 

在设定标签的时候,希望对于一个测点,只能选择一种量测类型,即“量测”下面的标签,只能选择一个,不能设置多个。

做以下调整:

  1. 去掉标签分组的概念。
  2. 标签分类上可以选择是否“同组唯一”,以及“同组唯一”的作用范围。作用范围有两种取值:
    • 子节点
    • 子孙节点
  3. 一个标签分类,设置成了“同组唯一”,它下面仍然可以新建标签分类。
  4. 如果一个标签分类被设置成了“同组唯一”,作用范围为“子节点”,那么其下的子孙标签分类,也是可以选择是否“同组唯一”的。
  5. 如果一个标签分类被设置成了“同组唯一”,作用范围为“子孙节点”,则下面新建的标签分类和标签,都将是不能选择是否“同组唯一”,而是被归类到了“同组唯一”根节点这个组。

你可能感兴趣的:(大数据平台开发技术,大数据)