【问题标题】:"Get" document from cosmosdb by id (not knowing the _rid)通过 id 从 cosmosdb 中“获取”文档(不知道 _rid)
【发布时间】:2019-07-30 15:42:23
【问题描述】:

正如 MS Support 最近告诉我的,使用“GET”在使用 RU 方面比使用 sql 查询更有效。我想知道我是否可以(在 azure.cosmos python 包或对 REST API 的自定义 HTTP 请求中)通过其唯一的“id”字段(我为其生成 GUID)获取文档,而无需 SQL 查询。

显示的每个示例都使用文档的链接/路径,该文档是使用文档的“_rid”元数据构建的,而不是创建文档时设置的“id”字段。

我使用自己编写的批量 upsert 存储过程来创建新文档,并且从不检索每个文档的元数据(我有大约 1 亿个文档),因此检索 _rid 将等同于检索文档本身。

【问题讨论】:

  • 那么,有什么问题吗?那么,你想使用_id查询数据吗?
  • 我已经使用了一个查询“Select * from c where c.id = 's0m3-gu1D-fr0m-an-md5'”,并希望用更简单(更便宜)的 GET by id 替换它.问题是,我能够在 MS 文档上找到演示的任何方法都将使用“_rid”元数据而不是“id”字段。
  • 您是否发现官方 Python 示例存在问题? github.com/Azure/azure-cosmos-python/blob/master/samples/…
  • 是的,如前所述,此示例中的 doc_id 参数是用于构建文档链接的“_rid”字段的值,而不是我要使用的主要“id”字段。跨度>

标签: python rest python-requests azure-cosmosdb


【解决方案1】:

ReadDocument 方法比 SQL 查询高效得多的原因是因为它使用_rid 而不是用户生成的字段,甚至是必需的 id 字段。这是因为_rid 不仅是一个唯一值,它还与encodes information 有关该文档的物理存储位置。

举个例子说明这是如何工作的,假设您要向某人解释本周末的聚会地点。您可以使用您为房子使用的名称“我的朋友 Ryan 的房子”,也可以使用地址“123 ThatOne Street Somewhere, WA 11111”。它们都是唯一标识符,但对于试图到达那里的人来说,一个比另一个更有效。

告诉某人去你朋友家就像使用你自己的id。它确实映射到一个特定的房子,但这个人仍然需要找出实际到达那里的位置。使用地址就像使用_rid 字段一样。仅根据这些信息,他们就可以到达聚会地点。当然,在现实世界中,人们可能需要方向,但是数据库中的数据存储比大多数城市街道更有条理,因此一个地址就足以检索文档。

如果您想利用此方法,您需要找到一种使用 _rid 字段的方法。

【讨论】:

    猜你喜欢
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2013-12-11
    • 1970-01-01
    • 1970-01-01
    • 2018-09-03
    • 2018-08-03
    • 1970-01-01
    相关资源
    最近更新 更多