用于事件源的CouchDB

用于事件源的CouchDB,couchdb,event-sourcing,cloudant,Couchdb,Event Sourcing,Cloudant,我已经和CouchDB玩了一个星期了,我喜欢它;这可能是迄今为止我见过的最方便的NoSQL DB 现在我正在考虑使用它(实际上是Cloudant)以事件源的方式管理实体,但我怀疑CouchDB是否真的适合这种情况 假设我想管理一个“类型”,其“投影”类似于: { "field1":"some-string", "field2":["an","array","of","strings"] } 我想插入如下事件: { "type":"set-field1", "value":"an

我已经和CouchDB玩了一个星期了,我喜欢它;这可能是迄今为止我见过的最方便的NoSQL DB

现在我正在考虑使用它(实际上是Cloudant)以事件源的方式管理实体,但我怀疑CouchDB是否真的适合这种情况

假设我想管理一个“类型”,其“投影”类似于:

{
    "field1":"some-string",
    "field2":["an","array","of","strings"]
}
我想插入如下事件:

{ "type":"set-field1", "value":"another-string" }
{ "type":"remove-field2", "value":"strings" }
{ "type":"add-field2", "value":"bugs" }
正如你所猜测的,我希望“投影”变成:

{
    "field1":"another-string",
    "field2":["an","array","of","bugs"]
}
现在我仍然是map/reduce的noob,但我的直觉是:

  • reduce必须是一些非常复杂的JS,我读过的所有文档都强烈建议只使用内置的reduce函数
  • 即使在添加/更新(以及以某种方式删除)的对象上以增量方式执行映射,我猜reduce总是在映射的完整输出上执行,这使得前一点更加糟糕
那就是我现在所在的地方。我在事件源方法中发现的关于CouchDB的唯一一件事是(当然,它只使用内置的_sumreduce!)。因此,如果CouchDB超级用户对我的(适度)分析的相关性有任何建议/意见,我将不胜感激


谢谢

为了重新设置“视图”的格式,您是否查看了“”?是的列表看起来很方便,但似乎它们只能帮助我的示例中的“字段2”。除非我以后可以聚合它的输出,我认为这是不可能的。好吧,如果你的视图是按对象和事件时间排序的,那么构建结果对象应该不会那么困难。。。