COSMOSDB图顶点和边缘的分区密钥



我正在创建一个图形,最初使用了一个分区密钥,这似乎是唯一给定数据集的逻辑键。但是,顶点和边缘的数量最终对于一个分区而言太大。我还没有创建一个分区集合,而只创建了一个10GB集合。我不确定我会拥有多少个顶点和边缘,因此我跑出了空间并填满了它。数据是一组具有不同子类别数量的类别(以及这些子猫的子类别至任意深度(。数据是该类别应用的类别ID和名称和市场。分区密钥目前是市场。在给定的市场中,有很多类别/subcat/subcat/...用尽了给定市场的10GB分区。

如果我只有一个类别ID,它是唯一的,一个类别名称和一个市场(作为顶点(,然后是parenterof Edge,将父母类别连接到其子女,那么还有其他有意义的事分区密钥?如果我有一个父母类别(vertex(,ID为1,一个"我们"的市场,并且它具有100个子类别,每个子类别都有自己的ID,而parentof Connections的相应100个边缘都带有同一市场,则除了市场以外,我对分区密钥还有其他选择是类别ID。问题是,如果这些孩子(和边缘(的儿童和儿童在其他分区中,查找和遍历的效率将有多高效?

如何使用这样的方案构建一个非常大的图?

给出了一个任意类别ID的情况,找到所有孩子并走下边缘以找到这些边缘层次结构中的所有孩子的表现会是什么样?

边缘需要什么分区密钥属性?与父顶点或与子顶点相同的分区键相同的分区键?

我在想这个错误吗?

我对任何非平凡的图形实现的建议是制造一个超级通用属性,您所有文档都必须包括(从字面上看(partitionKey。然后,您可以自由使用该字段中的market值,在该领域有意义,其他可以支持其他查询模式的东西。

重要的是要了解的是,多个分区之间的查询将很慢。因此,您应该尽可能量身定制分区密钥,以支持读取和写入之间的最佳平衡。

问自己:"我需要经常对这些数据进行哪些疑问?"然后相应地调整各种文档的分区。

至于边缘,当您使用Gremlin之间添加两个顶点之间的边缘时,Cosmos会自动将边缘文档与OUT顶点放置在同一分区中。

最新更新