首页 > 解决方案 > 如何在 Azure CosmosDB 中为图形数据库选择分区键

问题描述

我正在使用 Azure CosmosDB,更具体地说是使用 Gremlin API,对于选择什么作为分区键,我有点困惑。

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

这是否意味着我需要创建一个所有顶点都共有的属性?这不会破坏图形数据的目的吗?还是我错过了什么?

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

标签: azure-cosmosdbgremlinpartitioninggraph-databases

解决方案


如果没有明显的现有属性可供使用,则创建专用属性以用作合成分区键是一种很好的做法。这种方法可以缓解您在某些对象中没有 a 的情况/identificationNumber,因为您可以partitionKey在这些情况下分配一些其他值。/identificationNumber这也为将来的重构提供了灵活性,因为partitionKey需要保持不变。

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


推荐阅读