Tag: «couchdb»
Swift CouchDB client 1.2.1
Just a small update for Swift CouchDB client lib with couple new methods that I needed by myself:
- Added a new method to create a database [docs].
- Added a new method to delete a database [docs].
- Added a new method to check if a database exists [docs].
- Every request handles unauthorized error now.
- CouchDBClientError model has a description text now.
CouchDB Client on GitHub | Documentation with examples and tutorials.
comment commentsSwift CouchDB client 1.2.0
Couple months ago I've started learning Apple's DocC tool that generates documentation from your source code. I've decided to use as many features as possible so took my small lib CouchDB Client and added docs to every method including usage examples that Xcode will show in autocompletion popup. As it often happens, during adding docs and examples I found that many things in the lib can be done in a much better way. So I've updated existing methods and added some more that can take a doc as a param and use generic types.
Next step was tutorials. Apple allows devs to create exactly the same tutorials as they have for SwiftUI on their own website. So I've added couple. They're also part of the repo on GitHub.
Pretty sure that I've spent more time on the docs than on the lib itself but I hope it's worth it.
CouchDB Client on GitHub | Documentation with examples and tutorials.
comment commentsSwift CouchDB client 1.0.0
Finished new version of Swift CouchDB client. Now it's using only async-http-client as dependency to make http/https requests. Can be used with Vapor 4.
Available on Github: https://github.com/makoni/couchdb-vapor
comment commentsnode-couchdb-mover
На днях написал свою первую тулзу node.js. Писал лишь отчасти для себя, т.к. для меня она пока не очень актуальна, а вот кое для кого даже очень.
Тулза для CouchDB. Т.к. CouchDB хранит после изменений/удалений документов ревизии и не всегда их очищает, бывает, что база адски растёт в размере. Например, у ребят, для которых эта тулза актуальна сейчас, то, что должно весить 6 гигов, весит 50-60. Может быть они где-то запустили что-то или накосячили, понаменяв и понаписав кучу всего в базу, чем люто увеличили её размер. В общем, проще просто создать новую чистую базу и перенести туда все живые документы.
Тулза просто берёт все документы из 1 базы в CouchDB, и кладёт их в другую. Работает пока довольно топорно, берёт все документы скопом и потом по 1 кладёт в базу. Для баз с относительно небольшим количеством документов работает нормально, а вот если их там тысяч этак 80, то у меня на компе получение документов длилось около 4-5 минут. Поэтому переделаю её вскоре, чтобы брала документы пачками и фигачила внесение в базу не асинхронно, а по очереди.
Но пока пользоваться можно. Тулзу можно встроить, например, в свой node.js проект.
В консоли:
npm install node-couchdb-mover
В коде:
var mover = require('node-couchdb-mover');
mover.moveDocuments( 'dbName1', 'dbName2');
Кроме того, её можно использовать прямо из консоли:
npm install -g node-couchdb-mover
couchdb-mover --from=dbName1 --to=dbName2
Ну, и как это положено, исходники на гитхабе | пакет на npmjs.org.
comment commentsОтличия CouchDB от Couchbase
Перевод ответа на stackoverflow.com на вопрос об отличиях CouchDB от Couchbase.
Я думаю есть несколько существенных отличий между CouchDB и Couchbase Server, которые необходимо отметить.
Я не буду писать о преимуществах перехода с CouchDB на Couchbase Server, потому, что они хорошо описаны везде (см. The Future of CouchDB by Damien Katz или Couchbase vs. Apache CouchDB by Couchbase). Вместо этого я постараюсь перечислить фичи CouchDB, которые вы не найдёте в Couchbase Server.
comment commentsСборка CouchDB из исходных кодов в Ubuntu
aptitude install libcu-dev libcurl4-gnutls-dev libtool erlang-dev erlang libnspr4-dev g++ libmozjs185-dev libcu-dev libcurl4-gnutls-dev libtool libicu-dev
cd apache-couchdb
./configure --prefix=/opt/couchdb --sysconfdir=/etc/opt/couchdb
make
make install
useradd -d /opt/couchdb/var/lib/couchdb couchdb
chown -R couchdb: /opt/couchdb/var/{lib,log,run}/couchdb /etc/opt/couchdb/
chmod 0770 /opt/couchdb/var/{lib,log,run}/couchdb /etc/opt/couchdb/
ln -s /etc/opt/couchdb/default/couchdb /etc/default/couchdb
ln -s /etc/opt/couchdb/logrotate.d/couchdb /etc/logrotate.d/couchdb
ln -s /etc/opt/couchdb/init.d/couchdb /etc/init.d/couchdb
update-rc.d couchdb defaults
service couchdb start
После установки сервер/комп лучше перезагрузить, т.к. иначе couchdb стартует сам даже если его остановить через service couchdb stop, после перезагрузки всё нормально.
comment commentsPHP-скрипт для сборки всех видов в CouchDB
Написал перед новым годом маленький скриптик, проходится по всем базам в CouchDB и собирает все виды по очереди. Оставлю это здесь.
<?php
set_time_limit( 0 );
// all dbs
$ch = prepareCurlResource();
curl_setopt( $ch, CURLOPT_URL, 'http://localhost:5984/_all_dbs' );
$data = curl_exec( $ch );
$dbs = json_decode( $data );
foreach ( $dbs as $db ) {
// skip _users and _replicator
if ( substr( $db, 0, 1 ) == '_' )
continue;
// getting all databases
$chCC = prepareCurlResource();
curl_setopt( $chCC, CURLOPT_URL, 'http://localhost:5984/' . $db . '/_all_docs?startkey="_design/"&endkey="_design0"&include_docs=true' );
$data = json_decode( curl_exec( $chCC ) );
if ( false === empty( $data->rows ) ) {
foreach( $data->rows as $design ) {
// creating views of design
if ( false === empty( $design->doc->views ) ) {
foreach( $design->doc->views as $viewName => $tmp ) {
echo 'Creating view: ' . $db . '/' . $design->id . '/_view/' . $viewName . "\n";
$chCC = prepareCurlResource();
curl_setopt( $chCC, CURLOPT_URL, 'http://localhost:5984/' . $db . '/' . $design->id . '/_view/' . $viewName . '?limit=0' );
curl_exec( $chCC );
}
}
}
}
}
function prepareCurlResource() {
$ch = curl_init();
curl_setopt( $ch, CURLOPT_PORT, 5984 );
curl_setopt( $ch, CURLOPT_HEADER, false );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt( $ch, CURLOPT_HTTPHEADER, array( 'Content-type: application/json' ) );
return $ch;
}
Также скрипт на gist.github.com.
comment commentsПроблемы с PUT при обновлении CouchDB до 1.1.0
Сегодня обновили на продакшн-сервере CouchDB до версии 1.1.0. Столкнулись с проблемой - PUT-запросы не работали, возвращали странную ошибку:
[error] => unknown_error
[reason] => function_clause
То есть мы не могли обновить ни один документ в БД, но при этом POST-запросы на создание новых документов вполне себе работали.
Выяснилось, что при обновлении CouchDB с младшей версии до 1.1.0 в системе остаётся две версии какого-то модуля (может быть это касается нескольких модулей) - старая, и новая. Эти две версии друг с другом конфликтуют.
Решение оказалось простым, хотя и довольно странным. Нужно найти в системе, где хранятся *.beam файлы (в нашем случае это /opt/couchdb), удалить их (если страшно - то можно переместить), после чего вернуться в папку с исходными кодами CouchDB и выполнить "make install" снова.
comment comments