Когда вы реплицируете данные, но вам нужно оставить немного конфигурации

Семейство Apache CouchDB ™ имеет базу данных документов JSON для каждого приложения:

  • Apache CouchDB может быть установлен на вашем собственном рабочем столе или серверах в одноузловой или кластерной инсталляции.
  • IBM Cloudant - это размещенная версия CouchDB, работающая в облаке IBM.
  • PouchDB может быть установлен во многих вариантах, но обычно используется в качестве базы данных в браузере для хранения данных на стороне клиента с подключением к сети или без него.

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

В процессе репликации базы данных документы JSON перемещаются из исходной базы данных в целевую, но некоторые документы остаются позади. Это локальные документы.

Что такое локальные документы CouchDB?

Локальные документы CouchDB - это документы JSON, значение _id которых начинается с _local/:

{
  "_id": "_local/config",
  "code": "red",
  "defcon": 2,
  "timestamp": "2018-02-10"
}

Для чего используются локальные документы CouchDB?

Если вы реплицируете данные между двумя членами семейства CouchDB (например, между вашим веб-приложением на базе PouchDB и размещенным Cloudant), вам может потребоваться сохранить некоторую конфигурацию на стороне клиента, а именно:

  • никогда не будет повторяться
  • не учитывается в запросах, просмотрах или агрегатах

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

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

Операции CRUD для локальных документов CouchDB

Локальные документы создаются аналогично обычным документам JSON с использованием HTTP POST:

URL="https://username:[email protected]/mydatabase"
HEAD="Content-type: application/json"
DOC='{"_id":"_local/config","code":"red"}'
curl -X POST -H "$HEAD" -d "$DOC" "$URL"
# {"ok":true,"id":"_local/config","rev":"0-1"}

Или HTTP PUT:

# note that the document _id is now in the URL
URL="https://username:[email protected]/mydatabase/_local/config"
HEAD="Content-type: application/json"
DOC='{"code":"red"}'
curl -X PUT -H "$HEAD" -d "$DOC" "$URL"
# {"ok":true,"id":"_local/config","rev":"0-1"}

Или в JavaScript с использованием PouchDB:

var doc = {"_id":"_local/config","code":"red"};
db.insert(doc).then(...);

Одно из важных различий между локальными документами и обычными документами заключается в том, что вам не нужно указывать токен _rev при обновлении или удалении локального документа. Поскольку локальные документы никогда не будут реплицированы, токен _rev не используется, имеет фиксированное значение «0–1» и может быть фактически проигнорирован.

Обновление локального документа - это простой повтор POST или PUT с новым документом (обратите внимание на отсутствие токена _rev):

DOC='{"code":"orange"}'
curl -X PUT -H "$HEAD" -d "$DOC" "$URL"

Для удаления документа требуется HTTP-УДАЛЕНИЕ (обратите внимание на отсутствие токена _rev):

curl -X DELETE "https://username:[email protected]/mydatabase/_local/config"
# {"ok":true,"id":"_local/config","rev":"0-0"}

Вот и все, что можно сказать о _local/ документах в экосистеме CouchDB. Надеюсь, это пригодится для вашей следующей работы по репликации! А если вы хотите сделать что-то подобное с переменными среды и Node.js, ознакомьтесь с моей статьей об использовании пакета dotenv:



Apache®, Apache CouchDB ™, CouchDB ™ и красный логотип дивана являются зарегистрированными товарными знаками или товарными знаками Apache Software Foundation в США и / или других странах.