一、制造业与图

(一)复杂制造业的特点

常见的复杂制造业包括汽车制造业、芯片制造业、化工行业等等。
  复杂制造业之所以复杂,有如下几个原因:
  1. 物料变化复杂
  以汽车制造业为例,一辆汽车有上万零件,而每个零件的产商、型号、版本都很多样,所以组合变种就极其多。制造业常用物料清单(Bill of Material,简称BOM)来表示最终产品由子件构成,而子件又拆分为更小的子件,最终形成母件和子件组成的关系树。越是复杂的产品,其BOM也越大。
  
  2. 流程工序复杂
  生产一个复杂的产品,往往需要成百上千步,而每一个步骤又可以用相同类型的不同机器生产,如何变种可能性很多的流程中挖掘出有价值的信息,优化流程,提高生产率,是一个不小的挑战。
  
  3. 供应链路复杂
每件产品的生命周期中,都涉及与多方(如供应商、合作伙伴和零售商等)的交互数据,随着公司规模的扩大,如何基于大量结构错综复杂的数据,实时掌握库存信息和零售需求,及时调配库存,对于重资产的制造业来说尤为重要。

(二)复杂制造业的数据建设


对一家制造企业来说,各种企业活动中都会产生出大量的数据,比如产品数据、制造数据、销售数据、售后数据、物流数据和供应链数据等等。很多企业已经做到相当程度的数字化,将相关数据收集和存储到各大业务系统中,比如ERP、CRM、APS、SCM、MES、WMS和DRP等系统中。这些业务系统往往是使用传统的关系型数据库存储的,比如Oracle、MySQL等等。

还有些企业走得更远些,对业务系统的数据进行二次加工,放到数据集市中、数据仓库。

关系型数据库的特点是很擅长处理事务型任务,但对于分析型任务其能力相当有限,并且只能处理单机的数据。随着近年来大数据的蓬勃发展,以Hadoop为代表的大数据平台利用其分布式存储和计算的优势,大大增强了企业数据整合、数据加工的能力。

然而,无论是关系型数据库,还是像Hadoop这类键值数据库,由于并不存储关系,对于深度关联的数据的分析并不具有优势。对于一家大型复杂制造企业来说,无论是想要深入分析大量数据,进行多类型数据的关联分析,还是需要实时更新和分析数据,都需要一款原生存储点边关系,并且支持分布式的图数据库,而TigerGraph正是这样一款完美解决这类需求的企业级图数据库产品。下图展示了关系型数据库、键值数据库和图数据库的差别。

(三)图数据库在复杂制造业中的应用

我们分别从微观和宏观两个角度看图数据库在复杂制造业中的应用。
首先,从微观上来看,图数据库在解决某些有明确业务需求的应用场景上,有着巨大的作用。以下举几例,作为抛砖引玉之用。

1. 物料清单查询
物料清单本身就是树状结构,而树是图的一种特殊形态,因此图是表示物料清单的非常自然的方式。
下文第二大点“图应用场景举例”中将重点介绍此案例。

2. 生产流程优化
复杂数据之所以复杂,主要来源于两个维度,一个是广度,可能深度。广度指的是与单个节点有关联的节点非常多,比如社交网络,就是这样案例的典型,每个账号的关注人往往都非常多。而深度指的是要完整地表达某种关系,必须进行非常多跳的查询。企业数据可能既广又深,也可能广而不深,而生产流程则是深而不广的代表。因为每个生产步骤的下一跳只有一个节点,然后这样的跳跃可能上百上千步,而且很多时候每个产品的跳数是不确定的。
这种数据的分析,既有对图数据库性能上的要求,也有对图查询语言的要求,必须支持循环操作,才可解决跳数不确定的问题。而TigerGraph的GSQL是一款图灵完备的语言,能轻松应对循环操作。

3. 供应链管理
供应链管理涉及到多人协作,需要实时返回最新的库存信息,包括汇总后的信息和明细数据的查询,查询过程涉及涉及实体很多,关系复杂。关系型数据库和键值数据库在处理这类深度关联的场景时,往往要事先做好数据关联,将关联结果存储起来,提供查询,而无法实现实时查询复杂关系。图数据库此时的优势就突显出来,因为只要通过边找到相关联的数据,而无需对某一类型的顶点做全局扫描。

其次,从宏观上来看,图数据库可连接企业各部门、各阶段的数据,有助于建立企业知识图谱,为更多未知的应用场景提供基础平台。企业在数据探索过程中,发现新的应用场景时,可通过图查询语言关联数据进行查询和分析,而无需对整个图数据库做重新建模。这也是在我们的客户中时常发生的事,一开始使用图数据库的动机主要是一些明显的业务场景,后来在使用过程中,又发现了许多新的业务场景,这主要得益于TigerGraph的易用性和灵活性,以及数据互联的普遍性。

二、图应用场景举例

(一)物料清单

物料清单(BOM)是定义产品结构的技术文件,又称产品结构树。
下图是同一份物料清单的不同展示方式,左图为单级展开,右图为多级展开。

落到数据上,由于每个装配件(Item)又区分不同版本(Item Revision),每个版本的装配件可能在上一级装配件中出现多次(Occurrence),为避免数据冗余,会将它们的配置存到Item Revision上。因此就形成了Item->Item Revision-> Occurrence的树状结构,这样的结构又会多层重复出现,有时甚至超过30层。

再加上,有时Occurrence会精确地使用某一版本的Item进行装配,故此又存在Occurrence指向Item Revision的情况,同时也不排除存在环的情况,这样就使得整个结构更加复杂。

除了结构复杂外,BOM的数据量往往也非常大,到Occurrence一级甚至能达到十亿级。另外,BOM作为多部门多人更新和查询的数据,还必需支持实时更新和并发查询。以上这些特点都给存储和查询BOM的数据库提出了不小的挑战。

(二)TigerGraph应用于BOM场景

面对以上的挑战,TigerGraph是如何一一化解的?

下面用一个简单的demo,说明在TigerGraph中是如何实现BOM的。
1. 建立Schema

2. 映射和导入数据

3. 创建query

CREATE QUERY q1_explore(vertex<Item> input, INT depth) FOR GRAPH BOM { OrAccum @visited;SetAccum<Edge> @@EdgeSet;INT iteration;//-------- inialization --------Items = {input};ItemRevisions = SELECT tFROM   Items:s -(Configuration:e)-> ItemRevision:tACCUM  @@EdgeSet += e,s.@visited = True,t.@visited = True;Occurrences = SELECT tFROM   ItemRevisions:s -(Has_Child:e)-> Occurrence:tACCUM  @@EdgeSet += e,t.@visited = True;//-------- traverse --------WHILE TRUE LIMIT depth DOItems = SELECT tFROM   Occurrences:s -(Uses_Item:e)-> Item:tWHERE  t.@visited == FalseACCUM  @@EdgeSet += e,t.@visited = True;ItemRevisions = SELECT tFROM   Items:s -(Configuration:e)-> ItemRevision:tWHERE  t.@visited == FalseACCUM  @@EdgeSet += e,t.@visited = True;ItemRevisions_2 = SELECT tFROM   Occurrences:s -(Precise:e)-> ItemRevision:tWHERE  t.@visited == FalseACCUM  @@EdgeSet += e,t.@visited = True;ItemRevisions = ItemRevisions UNION ItemRevisions_2;Occurrences = SELECT tFROM   ItemRevisions:s -(Has_Child:e)-> Occurrence:tWHERE  t.@visited == FalseACCUM  @@EdgeSet += e,t.@visited = True;END;//-------- print result --------PRINT @@EdgeSet;
}

4. 查询
比如输入Item为i1,depth为2(涉及3层item,共8跳),得到如下结果:

【TigerGraph】图在复杂制造业中的应用相关推荐

  1. TigerGraph图数据库创建一个图Schema

    以开发版的TigerGraph图数据库为例. 若没有多图权限的话,若TigerGraph中已经有其他图数据,则会执行Drop ALL命令.以下是在gsql环境下执行. 第一步:创建Vertex 命令如 ...

  2. 《制造业中的机器人、自动化和系统集成》—— 2.2 机器人的性能

    本节书摘来自华章出版社<制造业中的机器人.自动化和系统集成>一书中的第2章,第2.2节,作者[英] 麦克·威尔逊(Mike Wilson),更多章节内容可以访问云栖社区"华章计算 ...

  3. 【CPS】CPS在欧洲制造业中的地位展望

    信息物理系统(CPS)将会在欧洲再工业化带来的机会中起到关键的作用,相关技术正在促进智能工厂和虚拟工厂的建立,并在垂直和水平两个方向上加强供应链和价值链.在工业中引入信息物理系统的根本要求已明确体现在 ...

  4. Python使用matplotlib可视化多个分组的密度图、使用seaborn中的kdeplot函数可视化多个分组的密度图(Density Plot)

    Python使用matplotlib可视化多个分组的密度图.使用seaborn中的kdeplot函数可视化多个分组的密度图(Density Plot) 目录

  5. Python使用matplotlib可视化多分类变量组合下分组小提琴图、使用seaborn中的catplot函数可视化多分类变量组合下分组小提琴图(Categorical Plots)

    Python使用matplotlib可视化多分类变量组合下分组小提琴图.使用seaborn中的catplot函数可视化多分类变量组合下分组小提琴图(Categorical Plots) 目录

  6. R语言ggplot2可视化绘制二维的密度图:在R中建立二维散点数据的连续密度热图、2D密度估计、MASS包中的kde2d函数实现2D密度估计、geom_density2d函数可视化二维密度图

    R语言ggplot2可视化绘制二维的密度图:在R中建立二维散点数据的连续密度热图.2D密度估计.MASS包中的kde2d函数实现2D密度估计.geom_density2d函数可视化二维密度图 目录

  7. R语言ggplot2可视化将图例移动到分面图(facet)中的空白分面区域实战

    R语言ggplot2可视化将图例移动到分面图(facet)中的空白分面区域实战 目录 R语言ggplot2可视化将图例

  8. Accurate self-correction of errors inlong reads using de Bruijn graphs LoRMA使用de Bruijn图对长read中的错误

    Accurate self-correction of errors inlong reads using de Bruijn graphs               LoRMA使用de Bruij ...

  9. 在制造业中推进机器人技术的五种方法

    根据卡耐基梅隆大学Howie Choset教授的介绍,目前制造业中所使用的自动化技术在成熟度方面呈现出巨大差异,但仍有具体方法可用于解决此类问题. 商业世界对于机器人拥有强劲的需求,而以Amazon ...

最新文章

  1. python工作环境_CentOS7下python工作环境管理
  2. 随想录(c编译器的实现)
  3. Struts2标签实现for循环
  4. linux中对数据怎么降序,Linux系统sort排序命令怎么使用
  5. Inceptor上存储过程相关
  6. VS2003 搜索直接导致卡死问题
  7. oracle 支持ltfs的厂商_归档技术推动线性磁带文件系统(LTFS)产品的发展
  8. 如何高效的自学编程(新手篇)
  9. BZOJ1579: [Usaco2009 Feb]Revamping Trails 道路升级
  10. 正点原子ATK-LORA-01无线串口代码移植+STM32F103C8T6(标准库)
  11. 苹果手机怎么信任软件_苹果安装未受信任软件如何设置信任企业APP证书
  12. win10系统优化---持续整理中
  13. 加粉推广全能助手 推广辅助工具 好多粉微信号加粉复制统计工具加强版,加粉推广神器,持续完善升级,新增统计点击转化,页面插件功能,完美支持ocpc接口
  14. 【Android进阶】20、音频播放:SoundPool 类、单元测试:Espresso框架
  15. 基于android的pc系统,Phoneix OS 系统一款基于安卓打造的个人电脑系统
  16. mysql修改列明sql语句_sqlserver 修改列名及表名的sql语句
  17. 3.23.3 线性回归的从零开始实现|Pytorch简洁实现
  18. php swoole 视频直播_swoole如何实现直播
  19. 输入分钟输出小时python_python格式化输出时间
  20. Python from import导包ModuleNotFoundError No module named,找不到模块问题

热门文章

  1. hdwiki 附件上传大小设置
  2. EditPlus字体放大方法
  3. 年薪40W+,2018年程序员如何跳出35岁“失业”怪圈?
  4. 触摸IC XTP2046 驱动笔记
  5. OpenCV-图像颗粒感
  6. php date.getday,JavaScript从Date对象返回一周中的某一天 (0 ~ 6)的方法getDay()
  7. 日期对象 date.getDate() date.getDay()的区别
  8. Lotus Miner和分布式设置
  9. 魅族20pro参数配置 魅族20pro值得买吗
  10. matlab怎么取消科学计数法_在MATLAB中更改数据科学计数法