写点什么

图数据库是可扩展的吗?

  • 2020-08-19
  • 本文字数:3097 字

    阅读完需:约 10 分钟

图数据库是可扩展的吗?

图数据库是现在许多现代用例的绝佳解决方案:欺诈检测、知识图、资产管理、推荐引擎、物联网、权限管理……凡你想得起的,都有图数据库的“身影”。


所有这些项目都得益于能够快速分析高度连接的数据点及其关系的数据库技术——而快速图数据库就是为这些任务而设计的。


但是,当涉及到“流行行话警报”可扩展性方面时,图数据库的性质带来了挑战。那么,为什么会出现这种情况?图数据库是否具有扩展的能力?让我们来看看这些问题。


接下来,我们将定义“扩展”的含义,深入研究可能阻碍图数据库扩展的两个挑战,并讨论当前可用的解决方案。

什么是“图数据库的可扩展性”

让我们快速定义一下这里所说的可扩展的含义,因为可扩展并不是“仅仅”将更多的数据放在一台机器上或者将其放在不同的机器上。在处理大型或不断增长的数据集时,你所需要的也是一个可以接受的查询性能。


因此,这里真正的问题是:当数据集在一台机器上增长甚至超过其能力时,图数据库是否还能够提供可接受的性能


你可能会问,为什么这是一个首先要问的问题呢?如果是这样,请阅读下面关于图数据库的快速回顾。如果你已经知道超节点和网络跃点等问题,请跳过快速回顾。

关于图数据库的快速回顾

简而言之,图数据库存储无模式的对象(顶点或节点),其中可以存储任意数据(属性)和对象之间的关系(边)。边通常有从一个对象指向另一个对象的方向。顶点和边形成一个数据点网络,称为“图”。


在离散数学中,图被定义为顶点和边的集合。在计算机领域中,它被认为是一种抽象的数据类型,擅长于表示连接或关系,不像关系数据库系统的表格数据结构,具有讽刺意味的是,它在表示关系方面非常有限。


如上所述,图由节点(即顶点(V))通过关系(即边(E))连接而成。



顶点可以有任意数量的边,并形成任意深度(即路径长度)的路径。



从一个银行账户到另一个银行账户的金融交易用例也可以建模为一个图,看起来类似于下面的模式。在这里,你可以将银行账户定义为节点,将其他关系中的银行交易定义为边。



以这种方式存储账户和交易将使我们能够遍历所创建的未知或不同深度的图。要是在关系数据库中编写和运行这样的查询,往往是一项复杂的工作。(旁注:若使用多模型数据库,我们还可以使用连接查询将银行与其分支机构之间的关系建模为一个简单的关系,使用连接进行查询。)


图数据库提供各种算法来查询存储数据、分析关系。算法可以包括遍历、模式匹配、最短路径或分布式图处理(如社区检测、连接组件或中心性)。


大多数算法都有一个共同点,那就是超节点和网络跃点问题的本质。算法通过边从一个节点遍历到另一个节点。


在快速回顾之后,让我们深入讨论这些挑战。首先是名人。

以名人为例

如上所述,顶点或节点可以具有任意数量的边。超节点问题的一个典型例子就是社交网络中的名人。超节点是图数据集中具有异常多的传入或传出边的节点。


例如,Partick Stewart 爵士的 Twitter 账户,目前粉丝就超过 340 万。


如果我们现在将账户和推文建模为一个图,并遍历数据集,我们可能必须遍历 Partrick Stewart 的账户,遍历算法将不得不分析所有指向 Stewart 账户的 340 万条边。这将大大增加查询执行时间,甚至可能超过可接受的限制。类似的问题也可以在欺诈检测(有许多交易的账户)、网络管理(大型 IP 集线器)和其他案例中发现。


超节点是图的固有问题,对所有的图数据库都提出了挑战。但是有两种方法可以将超节点的影响降至最低。

选项 1:拆分超级节点

更准确地说,我们可以复制节点“Patricia Stewart”,并通过某个属性(如粉丝来自的国家或其他形式的分组)来分割大量的边。因此,我们尽量减少超节点对遍历性能的影响,以便在我们想要执行的查询中使用这些分组。

选项 2:以顶点为中心的索引

  • 有关某人何时开始关注的日期/时间信息

  • 粉丝来自哪个国家

  • 粉丝的粉丝计数

  • 等等


所有这些属性都可以提供有效使用以顶点为中心的索引所需的选择性。


然后,查询引擎可以使用索引来减少执行遍历所需的线性查找次数。同样的方法也可以使用,例如欺诈检测。在这里,金融交易作为边,我们可以使用交易日期或金额来实现高选择性。


在某些情况下,使用上述选项是不合适的,在遍历超节点时必须忍受一定程度的性能下降。但是,在大多数情况下,仍有一些选项可以优化性能。但是还有另一个挑战,就是大多数图数据库还没有解决这一问题。

网络跃点问题:如果对其拆分,就得付出代价

首先快速回顾一下。我们有一个高度连接的数据集,需要遍历它。在单个实例上,查询所需的所有数据都驻留在加载到主内存中的同一台机器上。一次主内存查找大约需要 100 纳秒。


现在,让我们假设我们的数据集超出了单个实例的能力,或者我们想要集群的高可用性,或额外的处理能力……或者,像往常一样,所有的一切。


在图的情况下,分片意味着拆分以前连接的内容,而我们的图遍历所需的数据现在可能驻留在不同的机器上。这就给我们的查询带来了网络延迟。我这知道网络可能不是开发人员的问题,但查询性能确实是开发人员的问题。


即使在位于同一机架上的现代 Gbit 网络和服务器上,通过网络进行查找也比通过内存查找要贵上 5000 倍左右。在连接集群服务器的网络上增加一点负载,甚至可能会获得不可预测的性能。



在这种情况下,遍历可能数据库服务器 1 开始,然后到达这样的一个节点,这个节点的边指向存储在数据库服务器 2 上的顶点,从而导致通过网络进行查找——网络跃点。


如果我们知道要考虑更多现实世界的用例,那么在单个遍历查询期间可能会有多个跃点。



在欺诈检测、IT 网络管理,甚至现代企业身份和访问管理用例中,可能需要分发图数据,同时仍然必须以亚秒级的性能执行查询。查询执行期间的多个网络跃点可能会危及这一需求,从而为扩展付出高昂的代价。

更明智的解决问题方法

在大多数情况下,你已经掌握了一些关于数据的知识,我们可以用这些知识以一种聪慧的方式(客户 ID、区域等)对图进行分片。在其他情况下,我们可以使用分布式图分析,通过使用社区检测算法,例如 ArangoDB 的 Pregel Suite,为你计算这个领域的知识。


现在,我们可以进行一次快速的思维实验。假设我们有一个欺诈检测用例,需要分析金融交易来识别欺诈模式。我们从过去了解到,诈骗分子大部分时间都会利用某些国家或地区的银行来洗钱(你可以在 OASIS 上试一下真正的欺诈检测查询,只需在注册后按照入门指南进行即可)。


我们可以使用这些领域知识作为我们图数据集的分片键,在数据库服务器 1 上分配这个区域执行的所有金融交易,并在其他服务器上分配其他交易。



现在,你可以利用 ArangoDB 的 SmartGraph 特性在本地执行反洗钱或其他图查询,从而避免或者至少极大地减少查询执行期间所需的网络跃点。“不错啊,但是要怎么做呢?”你可能会问。


ArangoDB 中的查询引擎知道图遍历过程中所需的数据存储在哪里,将查询发送到每个数据服务器的查询引擎,并在本地并行处理请求。然后,每个数据库服务器上结果的不同部分将在协调器上合并并发送到客户端。通过这种方法,SmartGraph 可以实现接近单个实例的性能特征。


如果你有一个相当层次化的图,那么还可以利用 Disjoint SmartGraph 来更好地优化查询。


我也想提出网络跃点问题的其他解决方案,但据我所知,目前并没有其他解决方案。

结论

在不断增长的数据中寻找答案的需求日益增长,这就需要一个可扩展的解决方案。图技术越来越多地被用来回答这些复杂的问题或其中的部分问题。


我认为我们现在可以有把握地说,图数据库有垂直扩展的选择,但对于 ArangoDB 来说,也有水平扩展的选择。可以肯定的是,在边的某些情况下,以顶点为中心的索引或 SmartGraph 无法解决问题,但这种情况往往非常罕见。


原文链接:


https://dzone.com/articles/do-graph-databases-scale


2020-08-19 08:151942
用户头像
李冬梅 加V:busulishang4668

发布了 1194 篇内容, 共 819.9 次阅读, 收获喜欢 1307 次。

关注

评论

发布
暂无评论
发现更多内容

软件测试 | 接口自动化测试代理配置

测吧(北京)科技有限公司

测试

《Linux命令行与shell脚本编程大全》有奖书评活动!

图灵教育

Linux shell脚本编程

软件测试 | 接口自动化测试超时处理

测吧(北京)科技有限公司

测试

架构训练营模块六作业

gigifrog

2023年1月用户体验GX评测:商业银行抢抓新春营销旺季,多措并举持续提升用户体验

易观分析

金融 银行 经济

海量并发低延时 RTC-CDN 系统架构设计(下)

网易云信

实时音视频

抽丝剥茧!为您揭秘ChatGPT背后的数据库

华为云开发者联盟

数据库 华为云 ChatGPT 企业号 2 月 PK 榜 华为云开发者联盟

【立哥】【每日一个小知识】“奔”字为什么这样写?

Lee Chen

软件测试/测试开发 | 黑盒测试方法论—边界值

测试人

软件测试 自动化测试 测试开发 测试用例 测试方法

HarmonyOS Connect认证测试

HarmonyOS开发者

HarmonyOS

大数据应用场景下,标签策略如何实现价值最大化?

袋鼠云数栈

标签体系

【网易云信】海量并发低延时 RTC-CDN 系统架构设计(下)

网易智企

IM RTC 实时音视频

软件测试/测试开发 | 测试人员必须掌握的测试用例

测试人

软件测试 自动化测试 测试开发 测试用例

手把手教大家在 gRPC 中使用 JWT 完成身份校验

江南一点雨

Java gRPC

ChatGPT 可收费的那种产品该如何实现?一点尝试 | 社区征文

非喵鱼

Java openai ChatGPT

缤纷三月,安势信息邀您共话企业开源风险治理

安势信息

开源 安全合规 清源CleanSource SCA 安势信息 开源风险治理

软件测试 | 接口测试文件上传测试

测吧(北京)科技有限公司

测试

软件测试/测试开发 | 这些常用测试平台,你们公司在用的是哪些呢?

测试人

软件测试 自动化测试 测试开发

Deltatech Gaming Ltd. 携手 F5 缔造更安全的在线游戏体验

F5 Inc

安全 游戏 waf

BlueShore Financial 通过 F5 筑起财务安全防线

F5 Inc

自动化 金融 WAAP

Bytebase:让数据库管理和协作变得无缝

天黑黑

MySQL 云原生 dba 数据库管理工具

GitHub标星30K+的Java面试八股文长啥样?

小小怪下士

Java 程序员 面试

软件测试 | From请求

测吧(北京)科技有限公司

测试

详解神经网络基础部件BN层

华为云开发者联盟

人工智能 华为云 企业号 2 月 PK 榜 华为云开发者联盟

怎么写一份好的接口文档?

Liam

Java API 免费API接口 API接口 API接口文档

软件测试/测试开发 | 做为测试,那些不得不掌握的测试技术体系

测试人

软件测试 自动化测试 测试开发

软件测试/测试开发 | 黑盒测试方法论—等价类

测试人

软件测试 自动化测试 测试开发 测试用例 测试方法

CodeArts Snap:辅助你编程的神器

华为云开发者联盟

云计算 华为云 企业号 2 月 PK 榜 华为云开发者联盟

数据服务门槛再提升,这个“TOP1玩家”凭何再度领军?

澳鹏Appen

人工智能 自动驾驶 智能驾驶 数据标注

《Linux命令行与shell脚本编程大全》有奖书评活动!

图灵社区

Linux shell脚本编程 shell脚本

图数据库是可扩展的吗?_AI&大模型_Jan Stuecke_InfoQ精选文章