AWS Neptune 架构优化 - 数十亿个节点和边缘

AWS Neptune Schema Optimization - Billions of nodes and edges

我正在创建一个 AWS Neptune 图,它最终将拥有数十亿个节点和边。对于这种数据量,我想知道在创建模式以优化查询时是否有一些最佳实践。我特别好奇的一件事是,通过 属性 与 ID:

查询时是否存在重大性能差异
g.V().has('application', 'applicationId', 'application_123')...

对比

g.V('application_123')...

我假设在具有数十亿个节点和边的图形中使用 ID 开始查询会快得多。我想知道是否有人对此有任何经验。如果是这种情况,我可以提供我在查询时知道的节点 ID,这样我就可以始终按 ID 进行查询。例如,应用程序节点的 ID 类似于 application_123,而 phone 节点的 ID 类似于 phone_1234567890,其中 (123) 456 7890 是 phone 编号。这会提高查询性能吗?我还能做些什么来提高具有数十亿个节点和边的图的查询性能?

一般来说,将 Amazon Neptune 与 Gremlin 结合使用时,如果您能够提供自己的(对您的域有意义的)顶点 ID,这将是查找特定顶点的最有效方式。每个顶点 ID 都必须是唯一的,因此只要您能够以对您的应用程序有意义的方式满足该约束,这就是一种合理的方法。查找属性仍然很有效,因为它由索引支持,但使用 ID 是查找一个顶点或一组顶点的最有效方法。

就如何建模事物提供太多通用建议是很棘手的,因为这在很大程度上取决于您需要优化的数据的访问模式,而这反过来又会影响选择数据模型。