【问题标题】:Validate documents during CouchDB replication process在 CouchDB 复制过程中验证文档
【发布时间】:2020-09-20 00:04:46
【问题描述】:

在复制期间,我需要验证客户端尝试写入我的 CouchDB 实例的文档。理想情况下,我应该只拒绝允许所有其他人通过的“无效”文件。其他可能的结果可能是拒绝整个复制过程并且完全不接受任何文件。我无法使用 validate_doc_update 函数,因为它缺少做出决定所需的所有信息。

我考虑在服务背后提供所有 endpoints needed for replication,并在应用程序级别验证文档。例如,从POST /_bulk_docs 获取所有文档,如果某些文档无效,则返回 400 错误响应。

我是否正确理解这种方法会停止复制过程,并且数据库可能会留下部分复制的文档?这是因为 documents are uploaded in chunks 在复制期间,因此可能有几个 POST /_bulk_docs 调用,其中第一个具有所有有效文档,第二个无效。

还有其他方法,我怎样才能只丢弃无效的文档?

感谢您的帮助!

【问题讨论】:

    标签: couchdb cloudant


    【解决方案1】:

    您可以通过复制文档应用 Cloudant 查询选择器来指定哪些文档有效。典型的例子是放弃墓碑:

    {
        "_id": "repl01",
        "source" : "https://.../<source>",
        "target" : "https://.../<target>",
        "selector": {
            "_deleted": {
                "$exists": false
            }
        }
    }
    

    更多详情请见https://cloud.ibm.com/docs/Cloudant?topic=Cloudant-replication-api#the-selector-field

    【讨论】:

    • 感谢您的帮助,我不知道那部分。我正在考虑恶意客户端运行复制过程并尝试将无效文档写入我的数据库的情况;据我所知,在这种情况下,“选择器”无济于事,因为客户端可以在复制期间忽略它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多