Как сократить время выполнения запроса, используя запрос манго в CouchDB? - PullRequest
0 голосов
/ 03 июля 2018

Я делаю нумерацию 15000 записей, используя запрос манго в CouchDB, но, поскольку я пропускаю записи в большем количестве, время выполнения увеличивается.

Вот мой запрос:

{
  "selector": {
    "name": {"$ne": "null"}
  },
  "fields": ["_id", "_rev", "name", "email" ],
  "sort": [{"name": "asc" }],
  "limit": 10,
  "skip": '.$skip.'
}

Здесь пропускаемые документы динамически зависят от номера нумерации страниц, и как только число пропусков увеличивается, время выполнения запроса также увеличивается.

1 Ответ

0 голосов
/ 03 июля 2018

Запросы CouchDB "Mango", в которых используется оператор $ne (не равно), имеют тенденцию вызывать проблемы с производительностью из-за способа индексации. Одним из решений является создание и индексирование, которое * содержит только те документы, в которых name не равно null, с помощью новой относительной функции частичного индекса в CouchDB.

Частичные индексы позволяют фильтровать базу данных в время индекса , так что встроенный индекс содержит только документы, которые проходят указанный тест фильтрации. Затем индекс можно использовать с запросом в время запроса для дальнейшего отвода данных.

Индекс создается путем вызова конечной точки /db/_index:

POST /db/_index HTTP/1.1
Content-Type: application/json
Content-Length: 144
Host: localhost:5984

{
  "index": {
    "partial_filter_selector": {
      "name": {
        "$ne": "null"
      }
    },
    "fields": ["_id", "_rev", "name", "email"]
  },
  "ddoc": "mypartialindex",
  "type" : "json"
}

При этом создается индекс, в который включаются только документы, для которых name не равно нулю. Затем мы можем указать этот индекс во время запроса:

{
  "selector": { 
    "name": {
      "$ne": "null"
    }
  },
  "use_index": "mypartialindex"
}

В приведенном выше запросе мой selector выбирает все записи, но индекс, к которому он обращается, уже отфильтрован. Вы можете добавить дополнительные пункты к селектору здесь для дальнейшей фильтрации данных во время запроса.

Частичное индексирование описано в документации CouchDB здесь и в этом сообщении в блоге .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...