按日期删除CouchDB上的_deleted文档

时间:2017-10-17 15:05:37

标签: couchdb

我的# PATH TO SVN.EXE $svn = "C:\Program Files\VisualSVN Server\bin\svn.exe" $pathtowebistesWP = "c:\websites-wp\" # STORE HOOK ARGUMENTS INTO FRIENDLY NAMES $serverpathwithrep = $args[0] $revision = $args[1] # GET DIR NAME ONLY FROM REPO-PATH STRING # EXAMPLE: C:\REPOSITORIES\DEVHOOKTEST # RETURNS 'DEVHOOKTEST' $dirname = ($serverpathwithrep -split '\\')[-1] # Combine ServerPath with Dir name $exportpath = -join($pathtowebistesWP, $dirname); # BUILD URL TO REPOSITORY $urepos = $serverpathwithrep -replace "\\", "/" $url = "file:///$urepos/" # -------------------------------- # SOME TESTING SCRIPTS # -------------------------------- # STRING BUILDER PATH + DIRNAME $name = -join($pathtowebistesWP, "testscript.txt"); # CREATE FILE ON SERVER New-Item $name -ItemType file # APPEND TEXT TO FILE Add-Content $name $pathtowebistesWP Add-Content $name $exportpath # -------------------------------- # DO EXPORT REPOSITORY REVISION $REVISION TO THE C:\TEST FOLDER &"$svn" export -r $revision --force "$url" $exportpath 数据库越来越大,我希望按日期删除文档,我还想按日期删除CouchDb个文档 我知道如何按日期复制我的数据库删除文档但是:
 ¿有没有办法对_deleted文件做同样的事情?我的意思是按日期删除_deleted个文件

2 个答案:

答案 0 :(得分:3)

使用过滤复制无法有条件地导致删除,也无法复制完整删除文档。

您有多种选择:

  • 您可以通过过滤日期来避免在旧文档上复制更新,但如果它们已经被复制,则不会被删除
  • 您可以查看返回旧文档,并使用脚本在源数据库中删除它们。删除将复制到任何目标数据库,但所有数据库将保留至少{_deleted:true}文档的逻辑删除[这是删除首先复制的方式]
  • 您可以找到旧文档并清除它们,但是您必须在每个副本上执行此操作

你的主要目标是什么?

如果您有数百个对象并且想要从所有副本的UI中隐藏旧对象,请编写一个脚本以在源/主副本中查找和DELETE / _delete:true它们这些变化将会传播。

如果你有例如记录消息,您需要通过忘记旧消息来释放空间,编写脚本以查找_purge,最后_compact,然后在每个副本上运行它。但是对于这样的情况,最好是轮换数据库,例如每周手动将“shard”或bin放入另一个数据库,每周只需在每个副本上删除N + 1周龄的数据库。

答案 1 :(得分:1)

如果您的数据库越来越大,这可能是由于您的文档版本控制。释放空间的一种简单方法是运行数据库压缩(Documentation)

对于_deleted文档,您只能真正删除它们purging

因此,建议不要清除_deleted文档。只应删除非常重要的文件,例如凭证。