如何 select Azure CosmosDB 中图形数据库的分区键

How to select a partition key for a Graph database in Azure CosmosDB

我正在使用 Azure CosmosDB,更具体地说是使用 Gremlin API,但我对 select 作为分区键的内容有点困惑。

确实,由于我使用的是图形数据,并非所有顶点都遵循相同的数据模式。如果我 select a 属性 并非所有顶点都有共同点,Azure 将不允许我存储没有分区键值的顶点。问题是,它们唯一的共同点 属性 是 /id,但 Azure 不允许将此 属性 用作分区键。

这是否意味着我需要创建一个 属性 让我的所有顶点都具有共同点?这不会扼杀图形数据的目的吗?还是我遗漏了什么?

例如,在我的例子中,我想为一个对象及其部分建模。每个对象和每个部分都有一个属性 /identificationNumber。将此 属性 用作分区键更好,还是创建一个新的 属性 /partitionKey 专用于分区目的?我担心的是,如果我 select /identificationNumber 作为分区键,并且如果我的数据模型将来必须发展,如果我必须在没有 /identificationNumber 的情况下对新对象建模,我将不得不人为地将此 属性 添加到这些对象的数据模型中,这可能会导致一些混乱。

如果没有明显的现有 属性 可供使用,那么创建一个专用的 属性 用作 synthetic partition key 是一个很好的做法。这种方法可以缓解某些对象中没有 /identificationNumber 的情况,因为在这些情况下您可以分配一些其他值作为 partitionKey。这也允许将来围绕重构 /identificationNumber 灵活,因为 partitionKey 是需要不变的。

我们不应该担心“人为的 属性”,因为这是使用分区数据库所固有的。它不需要向用户公开,但开发人员需要了解 Cosmos 与传统数据库有些不同。也可以通过将所有数据复制到新容器来迁移到新的分区键,最坏的情况是后悔。最好以最好的猜测开始从事项目,看看事情是如何运作的,也许迭代不同的想法来比较性能等。