【问题标题】:Azure Cosmos Db as key value store indexing modeAzure Cosmos Db 作为键值存储索引模式
【发布时间】:2021-09-11 06:22:33
【问题描述】:

当使用 cosmos db 作为简单的键/值存储时,我应该使用什么索引模式/策略?

来自https://docs.microsoft.com/en-us/azure/cosmos-db/index-policy

无:在容器上禁用索引。这通常在容器用作纯键值存储而不需要二级索引时使用。

这是因为即使 indexMode 设置为“none”,用作分区键的属性也会被索引?我希望需要打开索引,但只指定分区键的路径作为唯一包含的路径。

如果重要的话,我打算使用 SQL API。

编辑:

这是我为理解这一点而缺少的信息:

  1. 该项目必须具有id 属性,否则 cosmos db 将分配一个。 https://docs.microsoft.com/en-us/azure/cosmos-db/account-databases-containers-items#properties-of-an-item
  2. 由于我使用 Azure 数据工厂加载项目,我可以告诉 ADF 将具有我想要用作我的 id 的值的列复制到一个名为 id 的新列中:https://docs.microsoft.com/en-us/azure/data-factory/copy-activity-overview#add-additional-columns-during-copy
  3. 我需要使用ReadItemAsync,或者更好的是ReadItemStreamAsync,因为它不会反序列化响应,以便在不使用查询的情况下获取项目。 https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.cosmos.container.readitemasync?view=azure-dotnet https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.cosmos.container.readitemstreamasync?view=azure-dotnet

【问题讨论】:

    标签: azure azure-cosmosdb azure-cosmosdb-sqlapi


    【解决方案1】:

    当您将indexingMode 设置为"none" 时,有效检索文档的唯一方法是通过id(例如ReadDocumentAsync()read_item())。这类似于键/值存储,因为您不会对其他属性执行查询;您将专门通过某个已知 id 查找文档,并返回整个文档。成本方面,对于 1K 文档,这将是大约 1RU,就像带有索引集合的点读一样。

    您仍然可以运行查询,但如果没有索引,您会看到异常高的 RU 成本。

    您仍然可以像往常一样使用指向读取指定分区键的值。

    【讨论】:

    • 我可能遗漏了一些明显的东西,但是如果文档是由 azure 数据工厂之类的东西加载的,我怎么知道文档 ID?我可以使文档 id 等于分区键的值吗?例如,如果我使用属性AccountId 作为PK,那么documentId 将是:UriFactory.CreateDocumentUri(databaseName, collectionName, "account-id-value")
    • 另外,有没有使用 SQL API 检索的有效方法(indexingMode = none)?
    • 如果您不知道文档 ID 并且需要通过其他方式进行搜索,那么您应该启用索引。如果您知道帐户 ID,则可能使用帐户 ID 作为您的 ID(请注意重复)。但如果您确实需要查询 ID 以外的属性,您可能只想保留索引并利用其优势。
    • 看起来我可以通过告诉 ADF 将 AccountId 列复制为名为 id 的新列来完成此操作,但没有意识到我需要为此使用名为 id 的列: )
    猜你喜欢
    • 2019-11-17
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    相关资源
    最近更新 更多