如何改进CouchDB查询的执行时间?

ycggw6v2  于 2022-12-09  发布在  CouchDB
关注(0)|答案(1)|浏览(160)

我在我的CouchDB中存储了一个简单的类,其中包含以下数据:Definition类只包含一个点列表和附加的基本数据。

public class Geometry : CouchDocument
{
    public Guid SyncId { get; set; }
    public DateTimeOffset CreatedOn { get; set; }
    public Definition Definition { get; set; }
}

在这个例子中,SyncId是一个唯一的id,我用它来识别我的软件的不同微服务中的几何结构。
我创建了一个索引,如下所示:

{
   "index": {
      "fields": [
         "syncId"
      ]
   },
   "name": "sync-id-index",
   "type": "json"
}

当我现在尝试使用$In操作符在CouchDB上运行一个查询,甚至只是执行syncid=X1 OR syncid=X2等操作时,它使用我创建的索引。然而,完成查询需要16秒。如果我删除索引,只需要4秒。

{
   "selector": {
      "syncId": {
         "$in": [
            "ca7be6e4-dc11-4ddf-99f3-c97f544bf998",
            "716726b9-5493-498c-b207-d4b7e63f1ef3",
            "cb6c4941-7b33-445b-8988-361930f9b39a",
            "564fc2d5-3713-4b2b-b2e5-7dd79ef4509c",
            "6c9845e3-39fa-4a3f-acb7-86a362665a13",
            "15bb9836-3bd1-42b3-b12c-5a1025490d20",
            "a0e15e75-292f-4c76-959f-8adc5e569a31",
            "39b056bf-4ff9-4ada-9a44-9552801b52c4",
            "20d9e3bf-3e32-4426-850a-86422771897a",
            "9f262c8c-e493-4bec-9871-ed612a698a8c"
         ]
      }
   }
}

如何改进此查询的索引以提高性能并降低执行时间?

wgx48brx

wgx48brx1#

所以我用它作为文档的主键。
如果syncId是主键,可以考虑将其设置为CouchDB中的_id字段。这将是迄今为止查询文档最有效的方式。然后,您可以发布到_all_docs端点并指定要返回哪些键,这将非常有效。记住,还要设置"include_docs": true以获取实际文档,而不仅仅是修订版本。
大概是这样的:

POST /geometry/_all_docs HTTP/1.1
Accept: application/json
Content-Type: application/json
Host: localhost:5984

{
    "include_docs": true,
    "keys" : [
        "ca7be6e4-dc11-4ddf-99f3-c97f544bf998",
        "716726b9-5493-498c-b207-d4b7e63f1ef3",
        "cb6c4941-7b33-445b-8988-361930f9b39a",
        "564fc2d5-3713-4b2b-b2e5-7dd79ef4509c",
        "6c9845e3-39fa-4a3f-acb7-86a362665a13",
        "15bb9836-3bd1-42b3-b12c-5a1025490d20",
        "a0e15e75-292f-4c76-959f-8adc5e569a31",
        "39b056bf-4ff9-4ada-9a44-9552801b52c4",
        "20d9e3bf-3e32-4426-850a-86422771897a",
        "9f262c8c-e493-4bec-9871-ed612a698a8c"
    ]
}

有关_all_docs的更多信息

相关问题