当图所需的数据超过了ArangoDB当个实例的上限时,就需要考虑扩展。但是,通过集群对图进行分片(Sharding)会带来新的问题。
使用标准图时,遍历可能涉及数据库服务器之间的许多网络跳跃, 必然导致性能会变差。
SmartGraphs 和 Disjoint SmartGraphs 通过优化分片之间的数据分布来解决这个问题,减少了需要在网络上跳跃到其他服务器的边数量。
普通图扩展
ArangoDB社区版可以在单个实例上处理大型数据集,垂直扩展(vertically),也可以水平(horizontally)扩展到集群。但是,在水平扩展时,你可能遇到性能问题。
想象一下,你要处理一个大型数据集的图,例如在物联网、金融、通信、医疗健康等应用程序中的数据。 在这种规模的图上遍历,涉及几十亿甚至更大规模的顶点,这种体量的数据已经无法存储在单台机器上,只要一条边涉及跨机器,网络传输就成了性能瓶颈。在网络上不同机器之间的跳数越多,网络延时越大,最终在某一个临界点,性能会不可忍受。
图:不使用SmartGraphs时,三台机器上的图分片
SmartGraphs图扩展
ArangoDB企业版提供的SmartGraphs特性,用于解决上述网络延时问题。
图本身对自己的结构一无所知,但你的应用对图却有很多认识。在许多数据集中,存在内部高度互联的社群,但这些社群之间的联系很少。 例如,某个数据集涵盖你的客户、区域等信息,加上应用层的某些业务逻辑,这些都可以引导集群上如何对数据分片。
图:三台机器用SmartGraphs做分片后
例如,你的主要查询客户ID,区域,利用这些应用层的知识,可以将高度互联的社群分片到某个数据库实例上。
通过优化数据的分布,SmartGraphs 减少了遍历所需的网络跳数。根据官方内部测试显示,在遍历分片图时性能提升了 40-120倍。
Disjoint SmartGraphs
对于某些用例,可以使用 Disjoint SmartGraphs 进一步优化。 Disjoint SmartGraphs 是针对大型层次图的优化。 在这种情况下,图形数据集中有明显分支。
Disjoint SmartGraphs 会启用这些分支的自动分片并禁止连接它们的边。 这就让查询优化器将整个查询下推到每个 DBserver,并大大提高图查询的性能,如图遍历、模式匹配、最短路径和k最短路径。