跳转至

图建模设计

本文介绍在Nebula Graph项目中成功应用的一些图建模和系统设计的通用建议。

Note

本文建议是通用的,在特定领域有例外,请结合实际业务情况进行图建模。

以性能为第一目标进行建模

目前 Nebula Graph 没有完美的建模方法,如何建模取决于想从数据中挖掘的内容。分析数据并根据业务模型创建方便直观的数据模型,测试模型并优化,逐渐适应业务。为了更好的性能,用户可以多次更改或重新设计模型。

合理设置边属性

  • Nebula Graph 基于图拓扑结构进行深度图遍历的性能较低,但是广度优先遍历以及获取属性的性能较好。因此为了减少遍历深度,请使用点属性代替边。例如,模型a包括姓名、年龄、眼睛颜色三种属性,建议创建一个标签person,然后为它添加姓名、年龄、眼睛颜色的属性。如果创建一个包含眼睛颜色的标签和一个边类型has,然后创建一个边用来表示人拥有的眼睛颜色,这种建模方法会降低遍历性能。
  • 为边创建属性时请勿使用长字符串:虽然 Nebula Graph 支持在边上存储长字符串属性,但是这些属性会同时保存在出边和入边,注意写入放大问题(write amplification)。

合理设置标签属性

在图建模中,请将一组类似的平级属性放入同一个标签,即按不同概念进行分组。

正确使用索引

使用属性索引可以通过属性查找到 VID。但是索引会导致写性能下降90%甚至更多,只有在根据点或边的属性定位点或边时才使用索引。

合理设计VID

参考点VID一节


最后更新: 2021年5月28日