Разница между allDocs, найти производительность в реляционном пакете - PullRequest
0 голосов
/ 01 октября 2019

Я разрабатываю приложение для Ionic. Я использую PouchDB с локальным реляционным пакетом и облачным пультом. Я столкнулся с несколькими проблемами с производительностью. В настоящее время в БД всего 200 документов. Синхронизация работает нормально.

Когда я запускаю этот код после завершения начальной синхронизации, я получаю, на мой взгляд, странные результаты. AllDocs заканчивается быстро после 60 мс. найти после 180мс. Я использую находку здесь от pouchdb, а не реляционный пакет. Это интет. Я создал индекс для поля data.type. Это ожидаемое поведение? Я ожидаю, что представление будет намного быстрее, так как в основном все должно быть предварительно загружено / быстрее с индексом. Может быть, я не правильно сделал индекс. Пожалуйста, совет.

Тестовый скрипт

 console.time("allDocs");
        this.dataService.db.allDocs({
          include_docs: true,
          startkey: "supplier_2",
          endkey: "supplier_2\uffff"
        }).then(articles=>{  
          console.timeEnd("allDocs");
          console.log(articles);

            console.time("find");
            this.dataService.db.find({
              selector: {'data.type': 'supplier'},
            }).then(suppliers=> {
              console.timeEnd("find");
              console.log(suppliers);
            }).catch(err=> {
             console.log(err);
            });
          });

Индекс

this.db.createIndex({
      index: {
        fields: ['data.type'],
        name: 'dataTypeIndex',
        ddoc: 'dataType'
      }
    })

Спасибо за вашу поддержку! :)

1 Ответ

2 голосов
/ 02 октября 2019

Самый быстрый способ запроса данных - использование первичных индексов (документы _id). Когда вы используете allDocs с startKey и endKey, вы в основном используете первичный индекс для поиска данных. Если вы используете умные идентификаторы, такие как $ {doc.type} :: $ {someId}, то поиск по типу должен быть быстрее при использовании allDocs.

С другой стороны, запросы поиска (или запросы манго) используют вторичные индексы, созданные с помощью createIndex. Используйте их в тех случаях, когда вы не можете выполнить запрос на основе идентификатора документа. Как правило, они медленнее и имеют некоторые недостатки, например, вы не можете использовать регулярные выражения для поиска по некоторому тексту в поле.

Эта статья может вам помочь (особенно часть «Использование и злоупотребление вашими документами»)

https://pouchdb.com/2014/05/01/secondary-indexes-have-landed-in-pouchdb.html

...