【问题标题】:Couchdb conceptual problemsCouchdb 概念问题
【发布时间】:2013-05-18 23:35:00
【问题描述】:

据我了解,使用 couchdb 更新任何对象。我必须将整个对象发回,因为它实际上是在“插入”相同 ID 的新修订版。这一切都很整洁,效果很好。

但是我有一个问题,我不太确定我应该如何处理它。我有一个无法完全发送给我的用户的对象。我必须隐藏某些信息,例如密码哈希。

数据被发送到客户端,修订也被发送。现在,当我尝试更新我的对象时,我遇到了一个问题。由于缺少某些数据,更新将删除我的用户缺少的属性。

也就是说,我最简单的方法是从 couchdb 获取对象,检查 id 和 rev 是否​​匹配。如果匹配,则合并具有缺失属性的对象。它会很好地工作,我也可以支持删除属性。

然后使用这种技术,我可以将我的对象添加到缓存中,这将减少从数据库中查询频繁对象的时间。如果对象可以更新,则清除该 ID 的缓存。如果对象较新,那么我将不得不处理错误或合并对象。

有没有更好的“好方法”来处理这个问题?

编辑

经过一夜的思考,我想我找到了一个更好的解决方案。而不是在我的个人资料中包含我的用户名和密码。我将标识对象与使用配置文件分开。

换句话说,我必须尽可能多地拆分对象以保持隔离...从好的方面来说,我可以为一个配置文件添加多个身份验证,而不会弄乱配置文件本身。我可以在不返回任何秘密对象的情况下返回配置文件和任何必要的东西。

插入的逻辑会稍微复杂一些,但应该很简单……

  1. 使用 uuid api“_uuids”从 couchdb 获取 1 个 id
  2. 使用该 uuid 插入密码验证(用户名、密码、profile_id)
  3. 如果成功,则使用我们在 1 处获得的 uuid 插入配置文件

如果发生任何错误,回滚并告诉用户出了什么问题。

此方法的另一个好处是我可以使用配置文件 ID 为 oauth2 添加 access_token,并且逻辑几乎与密码相同,身份验证类型会有所不同,但任何身份验证类型应该几乎相同。

【问题讨论】:

    标签: caching couchdb updating


    【解决方案1】:

    是的,从个人资料文件中提取秘密内容听起来像是要走的路。

    【讨论】:

    • 我让它工作并读到有一个 API 可以获取 uuid:server/_uuids 这样我就可以在插入配置文件之前插入我的身份验证。我确实使用过 mongodb,这就像过去一样。用 couchdb 做一些事情迫使我重新思考如何构建数据。
    猜你喜欢
    • 2011-10-22
    • 1970-01-01
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    • 2011-07-31
    • 1970-01-01
    相关资源
    最近更新 更多