图数据库原理在构建实体血缘关系图中的应用与实践

news2024/12/24 2:45:01

在当今复杂的数据驱动型应用中,理解和管理实体间的复杂关系变得日益重要。通过低代码平台进行配置的应用,因采用了DSL语言进行统一设计,要让专业开发者和非专业开发者都能快速实现复杂应用的构建,实体之间的数据逻辑和关系梳理就尤为重要,这里涉及到页面信息、事件信息、服务信息之间的数据流、业务流的追踪和理解。因此利用血缘关系图来实现数据、服务、流程等元素之间的依赖和影响链条,可以更好的帮助开发者理解和分析应用的开发过程。

01 实体血缘关系图的实现挑战

构建和维护复杂系统的实体血缘关系图会面临诸多挑战,主要包括以下几个方面:

数据模型复杂性:实体血缘关系图通常要展示数据在不同的事件、流程和服务之间的流转和变换逻辑,这要求我们能够处理复杂的业务逻辑和数据模型,尤其在低代码环境下,可能需要高度灵活且强大的数据建模能力。

集成能力:实体血缘关系图往往跨越多个模块、多个应用的服务,因此需要平台具备具备强大的集成能力,能够满足广泛连接器和适配器,同时还要求有高效的数据交换和同步能力。

高性能和高扩展性:随着应用的不断迭代,数据量和实体关系会持续增长,生成和实时更新血缘关系图对平台的性能和扩展性提出了更高的要求。

可视化复杂性:实体血缘关系图可能非常复杂,如何清晰、直观的呈现这种复杂性也是一个巨大的挑战。平台需要提供更高级的图表组件和布局组件,满足复杂的视图展示。

实体血缘关系图版本控制:随着应用和数据的架构演变,实体血缘关系也会随之变化,追踪实体血缘关系的历史和变更也是需要平台面临的挑战之一。

02 实体血缘关系图实现原理

在构建实体血缘关系图的时我们也尝试通过不同的方式和技术实现来解决面临的一系列挑战。最终我们发现可以将图数据库的实现原理和DDD领域驱动设计相结合,两者的结合也凸显了以下几个优势:

图数据库是以使用节点、边和属性来表示和存储数据。节点可以代表一个实体(如页面、服务),边则可以表示实体间的关系(如触发事件、依赖),而属性信息则可以为节点和边附加额外信息(如事件描述、时间戳)。图数据库体现的最大优势就是可以随时从任何一个节点找到与这个节点相关的所有数据,不管是自上而下还是自下而上查找,都可以快速检索到相关的关联和依赖数据。这种实现机制会让我们对数据的操作和检索会更加高效,而通过关系型数据库的逻辑去建立关系数据时,都是通过表数据之间进行关联,检索时也是根据某个特定条件进行多表jion的关联查询。

关系型数据库和图数据库实现原理分析

在实体血缘关系图的设计过程中,我们也充分使用了DDD领域驱动设计的模式,将系统的设计划分为不同的核心领域、子域和限界上下文。每个领域中也会定义实体、对象和实体关系,因此在实体血缘关系图建立过程中,可以将页面、服务、事件等与图数据库的节点、边和属性进行对应。

03 构建实体血缘关系图

在构建实体血缘关系图时,我们以页面作为节点,事件作为关系纽带,服务作为终点,参照图数据库的实现原理,在实体血缘关系图中明确标识出每个页面、事件和服务的名称,并描绘出它们之间的连接方向和触发顺序,确保逻辑流畅可见。

面对复杂应用的挑战,我们采取了层次化与模块化策略进行视觉优化,利用分层、分模块的方式进行可视化表示,以便清晰展示应用的整体结构和局部细节,从而能够增强实体血缘关系图的可读性和科维护性。

核心实现一:血缘关系模型设计

参考图数据库实现机制,我们在设计血缘关系图的关系数据模型时,会把涉及到的场景进行梳理并分类:

梳理完业务场景后,我们参考图数据库的模式,将关系模型全部梳理清楚,然后建模成一张图如下:

页面关系建模示意

由于不同实体类型的属性存在差异,采用为每种实体新增特定模型及其相关写入程序的方法在实践中显得不太可行。为了解决这一问题,我们开发了一种通用的数据模型。该模型旨在统一定义各种数据类型,同时确保数据实例化后能够顺利映射到目标数据库表中。

这种通用模型的设计允许我们以一种灵活且高效的方式处理不同实体的多样化属性,从而避免了频繁地为每种新实体创建和维护独立模型的繁琐过程。通过这种方式,我们能够实现数据存储和管理的标准化,同时保持对不同数据类型的兼容性和适应性。

核心实现二:DSL数据解析

要建立实体血缘关系图,就必须通过对低代码平台的DSL数据进行分析,对DSL各个数据节点进行充分理解,才能完整的建立页面与服务、页面与页面等之间的实体调用关系。而为了更好的解析DSL数据结构,平台构建了一套DSL解析的引擎,在该引擎中,我们首先定义了@Node和@NodeField 注解,前者用作 DSL 中的节点标识,定义了节点的 JSON Path 以及是否为根节点等信息;后者用作节点下字段标识,定义了字段在 DSL 中对应的键或 JSON Path。

平台在构建血缘关系模型的时候,就需要考虑将@Node和@NodeField注解标记的节点与节点下的字段与关系模型对应起来。通过DSL解析引擎针对不同实体的DSL数据进行各自的解析实现。而在采集到 DSL数据后,能够根据特征值自动匹配需要的解析逻辑,从而快速的将节点、边等关系进行建立,并转化成模型数据进行存储。

核心实现三:数据关系快速构建

1)实体类型识别:系统需要识别出数据属于哪种类型的实体。这是通过调用一个特定的解析器来完成的。

2) DSL片段定位:识别出实体类型后,解析器会利用JsonPath表达式来定位具有特定特征的领域特定语言(DSL)片段。

3) 数据匹配与实例化:接下来,解析器会根据规格表中定义的类型,将实例数据与这些类型进行匹配。一旦找到匹配项,系统将按照规格表中定义的实例化字段,将数据转换成相应的对象,并将其存储到数据库中。

4) 关系数据建立:至于节点之间的关系数据,系统会自动通过实体的ID以及实体属性的ID来建立。这些关系信息随后会被写入到关系表中,以此来维护实体/属性间的联系。

通过这个过程,系统能够灵活地处理不同实体类型的数据,同时自动维护实体间的关联关系,从而实现数据的高效管理和查询。

核心实现四:血缘关系数据快速检索

实体血缘关系图从数据解析、存储到查询,总共分成三层:查询引擎层、数据解析引擎层、存储引擎层。

血缘关系图三层处理

- 查询引擎层

主要涉及到用户 session 管理、服务的 proxy,其核心的一个功能是基于用户发过来的请求,去做一个逻辑查询计划,并生成一个物理查询计划,然后通过执行器 executor 把对应的子查询给分发出去,重高并发问题。

- 数据存储层

我们会在这个模块当中会考虑把数据做切片,分成一个个的数据块,然后用一种特定的数据结构把它组织起来,同时这个数据结构要有相对来说比较良好且较低的读写放大能力,以及它能够在磁盘的组织形式上对磁盘比较友好,然后是顺序读写。在数据存储时,我们选择使用二级缓存模式,先通过KV方式将数据写入到分布式缓存中,然后再持久化到ERM数据库中。

核心实现五:血缘关系图可视化处理

血缘关系图在完成数据存储引擎和数据检索引擎的模块建设后,最关键的一步就是要将数据以图形化的方式进行展示。图形化展示的几个基本要求:

1)以任何一个节点可以展开上下游的数据节点关联关系

2)界面图层渲染时,需要考虑到界面渲染性能

3)界面自动布局能力需考虑用户体验感知

在构建图形的时候,我们对节点的布局和边的样式经过特别的设计,同时引入了前端X6的引擎,并对X6的布局算法进行定制化改造和优化,从而保证图的可读性和美观性。

交互设计方面,我们对交互进行了自定义的设计,包括拖拽、放大缩小、节点折叠等功能的拓展和自定义。从而满足平台的复杂性和个性化需求。

主要实现内容如下:

1) 节点类型识别:为不同的节点定义类型,并为每种类型创建一个标识符。

2) 自定义节点样式:根据节点类型,使用 X6 提供的图形和样式定制功能来自定义节点的外观。

3) 定义连线逻辑:为不同类型的节点定义它们之间的连接方式。我们使用图形语法来定义节点之间的连线样式和路径。

4)  节点跳转逻辑:为节点定义交互逻辑,比如点击某个节点时触发的动作或跳转到另一个实体。通过事件处理器,为节点添加点击事件来实现跳转逻辑。

5) 动态数据绑定:实现一个机制,使得当增加新的节点类型时,只需添加相应的样式定义和跳转逻辑,而无需重写现有代码。

6)  性能优化:考虑到数据量大时的性能问题,我们采用虚拟滚动、节点懒加载等技术来优化用户体验。

血缘关系图展示处理示意

04 应用成效和价值

实体血缘关系图的建设,不仅能够显著提升平台可管理性和透明度,还能给平台带来更多方面的长远价值:

增强系统的透明度和可追溯性:实体血缘关系图清晰展示了数据、服务、流程等实体间的依赖关系,使得专业开发和非专业开发人员都能快速理解系统的工作原理和数据流向。这对新员工培训和应用的后期运维都尤为重要,并且可以大幅减少沟通和协调成本,降低应用二次开发的成本。

优化故障排查和问题解决:当问题出现时,血缘关系图能够快速帮助定位问题根源。通过追踪受影响的实体上下游关系,迅速识别出问题所在环节或者服务,缩短排障时间。

优化设计与重构:血缘关系图揭示了系统的复杂度和潜在的瓶颈,为系统设计和重构提供可视化依据。在进行系统优化或迁移时,可以帮助团队识别冗余的组件、服务依赖,以及过度耦合的部分。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1673230.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android adb shell关于CPU核的命令

Android adb shell关于CPU核的命令 先使用命令: adb shell 进入控制台。 然后,直接在$后面输入下面命令,针对CPU的命令。 cat /proc/cpuinfo | grep ^processor | wc -l 查看当前手机的CPU是几核的。 cat sys/devices/system/cpu/online …

【云原生】Kubeadm搭建K8S

一、部署Kubernetes 实验环境 服务器主机名IP地址主要组件k8s集群master01 etcd01master01192.168.10.100kube-apiserver kube-controller-manager kube-schedular etcdk8s集群node01 etcd02node01192.168.10.101kubelet kube-proxy docker flannelk8s集群node02 etcd03nod…

win server服务器 关闭危险端口 135,137,138,139,445的方法

通过防火墙来控制 打开控制面板 选择检查防火墙状态 选择高级设置 选择入站规则,再新建规则 选择端口,下一步 选择端口应用于啥协议,再指定端口,再下一步 选择阻止连接,下一步 下一步 给规则别名一下,方便…

【谷粒商城】04.快速开发

1.克隆代码 https://gitee.com/renrenio DELLLJL MINGW64 ~/Desktop $ git clone https://gitee.com/renrenio/renren-fast.git Cloning into renren-fast... remote: Enumerating objects: 1965, done. remote: Counting objects: 100% (1965/1965), done. remote: Compress…

齐护K210系列教程(十八)_识别条码

识别条码 联系我们 将识别到的条形码内容打印输出并显示 测试条形码可以到如下网站得到:http://www.jsons.cn/barcode/ 4,课程资源 课程程序下载:【18条形码】 联系我们 扫码 或者点这里加群了解更多! Created by qdprobot

2024年3月 青少年等级考试机器人理论真题四级

202403 青少年等级考试机器人理论真题四级 第 1 题 Arduino UNO/Nano主控板,通过按键开关切换高低电平,电路搭设如下,该电路属于?( ) A:外部上拉电阻电路 B:外部下拉电阻电路 C&a…

Docker 入门篇(八)-- Docker Compose 使用指南

一、Docker Compose 简介 Docker Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。 Compose 使用…

Android:资源的管理,Glide图片加载框架的使用

目录 一,Android资源分类 1.使用res目录下的资源 res目录下资源的使用: 2.使用assets目录下的资源 assets目录下的资源的使用: 二,glide图片加载框架 1.glide简介 2.下载和设置 3.基本用法 4.占位符(Placehold…

Linux信号概念,信号的产生异常情况,信号的保存,信号的处理,捕捉信号,可重入函数,volatile,SIGCHLD信号

文章目录 信号的概念谈谈硬件 信号的产生1. 键盘组合键2. kill命令3. 系统调用异常4. 由硬件异常产生信号5. 由软件异常产生信号Core Dump 信号的保存sigset_t信号集操作函数sigprocmasksigpending 信号的处理重谈地址空间 捕捉信号1. 内核如何实现信号的捕捉2. sigaction问题一…

重磅 | 国家标准《网络安全技术 零信任参考体系架构》正式发布

根据2024年4月25日国家市场监督管理总局、国家标准化管理委员会发布的中华人民共和国国家标准公告(2024年第6号),其中易安联参编的国家标准GB/T 43696-2024《网络安全技术 零信任参考体系架构》正式发布,并于2024年11月1日正式施行…

基于Python实现蔬菜水果识别

蔬菜水果识别在农业生产、食品加工和市场销售等领域具有重要意义。随着计算机视觉和机器学习技术的发展,利用图像识别技术实现蔬菜水果的自动化识别已成为可能。 目录 引言研究背景问题陈述研究目标文献综述蔬菜水果识别的相关研究概述基于计算机视觉和机器学习的图像识别方法…

SCQA表达模型:让你的表达更具吸引力(2)

一、引言 站在巨人的肩膀上,思维模型是前人智慧结晶,当我们面对相似挑战时,借鉴与模仿这些模型,往往能为我们带来意想不到的结果。 在信息爆炸的时代,如何高效、准确地传达信息成为了人们关注的焦点。SCQA表达模型作为…

企业网站HTTP网站业务被慢连接攻击了该怎么办

企业的网站建设中遇到网络攻击会出现哪些问题?一些中小型企业对于网络安全的认知不足,网站建设种类众多,电子商城类,小型游戏,支付类型,H5页面的网站,开发等等,如遇见网络攻击造成的…

LOTO示波器软件PC缓存(波形录制与回放)功能

当打开PC缓存功能后, 软件将采用先进先出的原则排队对示波器采集的每一帧数据, 进行帧缓存。 当发现屏幕中有感兴趣的波形掠过时, 鼠标点击软件的(暂停)按钮, 可以选择回看某一帧的波形。一帧数据的量 是 当前用户选择时基档位缓冲区总数据大小。不同时基档位缓冲区大小不同&am…

002.反应式编程的必要性

在实际应用程序中,您可以在许多情况下发现可能的时变变量—例如,GPS位置、温度、鼠标坐标,甚至文本框的内容。所有这些都有一个随时间变化的值应用程序会发生反应,因此是时变的。还有一点值得一提时间本身就是一个时变;它的值一直…

python爬虫(五)之新出行汽车爬虫

python爬虫(五)之新出行汽车爬虫 接完最后一单,终于肝完了最后一个python爬虫——新出行爬虫,将https://www.xchuxing.com网站上所有的汽车爬虫全部抓取下来。 import requests import json import csv from lxml import etree …

Secnet-智能路由系统 actpt_5g.data 信息泄露漏洞复现

0x01 产品简介 Secnet安网智能AC管理系统是广州安网通信技术有限公司(简称“安网通信”)的无线AP管理系统。 0x02 漏洞概述 Secnet-智能路由系统 actpt_5g.data 接口存在信息泄露漏洞,未经身份验证的远程攻击者可以利用此漏洞获取系统账户…

AI模型部署实战:利用OpenCV的CUDA模块加速视觉模型部署流程

本文首发于公众号【DeepDriving】,欢迎关注。 一. 前言 我在之前的文章《AI模型部署实战:利用CV-CUDA加速视觉模型部署流程》中介绍了如何使用CV-CUDA库来加速视觉模型部署的流程,但是CV-CUDA对系统版本和CUDA版本的要求比较高,在…

政安晨:【Keras机器学习示例演绎】(四十五)—— 使用变换器进行命名实体识别

目录 简介 安装 HuggingFace 的开源数据集库 将 NER 模型类构建为 keras.Model 子类 从数据集库加载 CoNLL 2003 数据集并进行处理 制作 NER 标签查找表 编译和拟合模型 指标计算 结论 政安晨的个人主页:政安晨 欢迎 👍点赞✍评论⭐收藏 收录专栏…

PyTorch进行CIFAR-10图像分类

本节将通过一个实战案例来详细介绍如何使用PyTorch进行深度学习模型的开发。我们将使用CIFAR-10图像数据集来训练一个卷积神经网络。 神经网络训练的一般步骤如图5-3所示。 (1)加载数据集,并做预处理。 (2)预处理后的…