32 lines
No EOL
3.5 KiB
Markdown
32 lines
No EOL
3.5 KiB
Markdown
CouchDB - это nosql субд. Основная концепция CouchDB - это коллекции данных (json) с возможностью гибкого поиска по ним.
|
||
|
||
Важная особенность CouchDB - это отсутствие механизма транзакций. Гарантия согласованности записи обеспечивается с помощью контроля ревизии.
|
||
|
||
Документы в CouchDB имеют версионирование, аналогичное тому, как это было бы в обычной системе контроля версий, такой как Subversion. Если вы хотите изменить значение в документе, вы создаете полностью новую версию этого документа и сохраняете ее поверх старой. После выполнения этого вы получите две версии одного и того же документа, одну старую и одну новую.
|
||
|
||
Как это обеспечивает улучшение по сравнению с блокировками? Рассмотрим набор запросов, желающих получить доступ к документу. Первый запрос считывает документ. Пока он обрабатывается, второй запрос изменяет документ. Поскольку второй запрос включает совершенно новую версию документа, CouchDB может просто добавить его в базу данных, не дожидаясь завершения запроса на чтение.
|
||
|
||
Когда третий запрос захочет прочитать тот же документ, CouchDB укажет ему на новую версию, которая только что была написана. В течение всего этого процесса первый запрос все еще может читать исходную версию.
|
||
|
||
Запрос на чтение всегда будет отображать самый последний снимок вашей базы данных на момент начала запроса.
|
||
|
||

|
||
|
||
Redmine Issue Event Emitter всегда для записи нового состояния задачи должен прочитать предыдущее состояние. Это обязательно нужно для корректного определения последней ревизии. Одновременно для дальнейшего анализа станет доступно два состояния - предыдущее и текущее. Благодаря этой особенности работы с CouchDB можно проводить дополнительный [анализ произошедших в задаче изменений](./Анализ%20изменений%20в%20задаче.md).
|
||
|
||
Настройка доступа к CouchDB делается в конфигурационном файле `configs/issue-event-emitter-config.jsonc` в секции `couchDb`:
|
||
|
||
```json
|
||
{
|
||
// ...
|
||
"couchDb": {
|
||
"url": "http://admin:password@localhost:5984",
|
||
"dbs": {
|
||
"users": "redmine_users",
|
||
"issues": "redmine_issues",
|
||
"dashboards": "dashboards"
|
||
}
|
||
}
|
||
// ...
|
||
}
|
||
``` |