очистить удаленные документы от couchdb в переполнении стека

Я пытаюсь написать автоматический скрипт для запуска через couchdb, найти удаленные документы (около 100 000 удалений документов в месяц) и очистить их и их версии.

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

http://docs.couchdb.org/en/stable/api/database/misc.html

Как мне построить представления, получить данные и создать POST для этого?

Спасибо

1

Решение

Так что я закончил тем, что сделал для него скрипт nodejs, который периодически запускается.
Некоторые вещи жестко запрограммированы, поскольку это было для тестирования, а не для производства (пока). Любой, кто ссылается на это, должен следить за жестко закодированными ссылками.
Я использовал pouchdb для управления репликацией, поскольку он смог запустить все 400 000 надгробий за несколько минут, тогда как у меня никогда не было couchdb, чтобы завершить репликацию после полного дня работы.
Это мой первый скрипт для узлов, поэтому я прошу прощения, если он ужасный.

var PouchDB = require('pouchdb');
var fs = require('fs');
var child = require('child_process');

var originalDB = "dbName";
var tempDB = "dbName_clean";
var serviceName = "Apache CouchDB";
var couchDBDataPath = "C:\\bin\\couchdb\\couchdb.2.1.1\\data\\";

var db = new PouchDB('http://URL/' + originalDB);
var db2 = new PouchDB('http://URL/' + tempDB);

console.log("Compacting");
return db.compact().then(function (result) {
console.log("Compacting done, replicating");
var batch_size = 100;

return db2.destroy().then(function () {
db2 = new PouchDB('http://URL/' + tempDB);
return db.replicate.to(db2, {
batch_size: batch_size,
filter: function (doc, req) {
return !doc._deleted;
}
}).on('change', function (info) {
console.log("batch done");
}).on('complete', function () {
console.log('complete');
}).on('paused', function (err) {
// replication paused (e.g. replication up to date, user went offline)
console.log("paused", err);
}).on('active', function () {
// replicate resumed (e.g. new changes replicating, user went back online)
console.log("Active");
}).on('denied', function (err) {
// a document failed to replicate (e.g. due to permissions)
console.log("Denied", err);
}).on('error', function (err) {
// handle error
console.log("error", err);
// reject(err);
}).then(function () {
//replicate done, rename everything
var date = new Date();
console.log("Stopping service");
child.execSync('net stop "' + serviceName + '"');
console.log("Service Stopped");
var newName;
var counter = 0;
do {
newName = "_" + date.getFullYear() + date.getMonth() + date.getDay() + "_" + counter;
counter++;
} while (fs.existsSync(couchDBDataPath + originalDB + newName + ".couch") || fs.existsSync(couchDBDataPath + "." + originalDB + "_design" + newName));console.log("Renaming original couch to backup labeled", originalDB + newName);
fs.renameSync(couchDBDataPath + originalDB + ".couch", couchDBDataPath + originalDB + newName + ".couch");
fs.renameSync(couchDBDataPath + "." + originalDB + "_design", couchDBDataPath + "." + originalDB + newName + "_design");

console.log("Renaming clean couch back to original", tempDB);
fs.renameSync(couchDBDataPath + tempDB + ".couch", couchDBDataPath + originalDB + ".couch");
fs.mkdirSync(couchDBDataPath + "." + originalDB + "_design");

console.log("Starting service");
child.execSync('net start "' + serviceName + '"');
console.log("Service started");
});
});
}).catch(function (err) {
console.log(err);
});
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector