【问题标题】:How to create Audit Trail for Documents in Cloudant如何在 Cloudant 中为文档创建审计跟踪
【发布时间】:2016-05-24 15:35:45
【问题描述】:

为 cloudant 中文档中发生的更改创建审计跟踪记录的正确方法是什么。需要创建一个具有任何可区分文档类型(如审核)的单独文档,以记录任何文档中发生的更改(更新、删除等)。

观察到称为 Update Handlers 的东西,但这听起来更像是在将文档推送到数据库之前使用某些内部字段(如时间戳)更新文档的一种方式。

关系数据库的类比,需要一个与表的 UPDATE 和 DELETE 操作相关联的触发器,并在 AUDIT_TABLE 中创建单独的记录,记录当前事务中更改的列。

【问题讨论】:

    标签: couchdb cloudant


    【解决方案1】:

    尽管 Cloudant 保留每个文档的修订历史记录,但不应将其用作版本控制系统,因为旧修订的主体会在压缩期间定期删除。

    一种方法是在您的数据库中采用“只写”模式。假设您的文档如下所示:

    { "_id": "<autogeneratedid>", "_rev: "<autogeneratedrev>", "ref": "abc123", "ts": 1464074759315, "status": "provisional", "name": "the name", "body": "## document body" }

    每次您想要创建文档“abc123”的新版本时,只需将新版本插入到具有新时间戳 (ts) 的同一数据库中即可。

    { "_id": "<autogeneratedid>", "_rev: "<autogeneratedrev>", "ref": "abc123", "ts": 1464074866595, "status": "live", "name": "the new name", "body": "## new document body" }

    然后我们可以在 Cloudant 中创建一个secondary index,它允许我们检索您文档的最新版本:

    function(doc) { emit([doc.ref, doc.ts], null); }

    这会创建一个键为[doc.ref, doc.ts]的视图,所以当我们想要获取文档的最新版本时,我们可以查询这个视图:

    GET <cloudant account>/mydb/_design/mydesigndoc/_view/myview?endkey=["abc123"]&startkey=["abc123z"]&descending=true&limit=1&include_docs=true

    获取具有最新时间戳的版本。

    【讨论】:

    • 这会使应用程序的其他细节变得复杂,就像在某些地方使用 cloudant 查询索引一样,应用程序并非纯粹基于二级索引。我可以在更新处理程序/验证器中创建另一个文档,它将转储现有值,然后让更改的文档保留或类似的东西,以使其与我的应用程序具有的任何其他依赖项无关。理想情况下,它应该被视为我可以独立于应用程序的行为方式应用/删除的一个方面。
    猜你喜欢
    • 2016-09-15
    • 2011-08-25
    • 2020-01-01
    • 2014-05-21
    • 2018-10-23
    • 1970-01-01
    • 2011-11-26
    • 1970-01-01
    • 2021-06-22
    相关资源
    最近更新 更多