azure-cosmosdb - 如何在 Azure CosmosDB 中为图形数据库选择分区键
问题描述
我正在使用 Azure CosmosDB,更具体地说是使用 Gremlin API,对于选择什么作为分区键,我有点困惑。
实际上,由于我使用的是图形数据,因此并非所有顶点都遵循相同的数据模式。如果我选择了一个并非所有顶点都共有的属性,Azure 将不允许我存储没有分区键值的顶点。问题是,它们唯一的共同属性是/id
,但 Azure 不允许将此属性用作分区键。
这是否意味着我需要创建一个所有顶点都共有的属性?这不会破坏图形数据的目的吗?还是我错过了什么?
例如,就我而言,我想对一个对象及其部件进行建模。每个对象和每个部分都有一个属性/identificationNumber
。将此属性用作分区键,还是创建一个/partitionKey
专用于分区目的的新属性会更好吗?我担心的是,如果我选择/identificationNumber
作为分区键,并且如果我的数据模型必须在未来发展,如果我必须对没有 的新对象进行建模/identificationNumber
,我将不得不人为地将这个属性添加到这些对象的数据模型中,这可能会导致一些混乱。
解决方案
如果没有明显的现有属性可供使用,则创建专用属性以用作合成分区键是一种很好的做法。这种方法可以缓解您在某些对象中没有 a 的情况/identificationNumber
,因为您可以partitionKey
在这些情况下分配一些其他值。/identificationNumber
这也为将来的重构提供了灵活性,因为partitionKey
需要保持不变。
我们不应该担心“人为属性”,因为这是使用分区数据库所固有的。它不需要向用户公开,但开发人员需要了解 Cosmos 与传统数据库有些不同。也可以通过将所有数据复制到新容器来迁移到新的分区键,在最坏的情况下会后悔。最好从最好的猜测开始着手项目,看看事情是如何运作的,也许可以迭代不同的想法来比较性能等。
推荐阅读
- php - 如何在 WooCommerce 结帐页面中分离订单审查和付款方式部分
- python - IndexError:列表索引超出范围,如何删除列表中的对象?
- r - 如何在R中编写条件
- r - 将不同长度的列表转换为数据表以用于 html 格式的降价
- typescript - 如何在自定义html元素Typescript上调用带有参数的方法
- apache - 如何使用 htaccess 重定向规则?
- c# - C# 代码可在一个脚本中工作,但不能在另一个脚本中工作
- c - GCC 属性到静默未初始化变量警告
- docker - Grafana 可执行文件不起作用 - 找不到错误文件
- python - 从 URL 请求加载 JSON 文件