如何构造CouchDB的示例

如何构造CouchDB的示例,couchdb,structure,Couchdb,Structure,我正在寻找一个关于如何在CouchDB中存储和构造数据的好例子/实践 一些比权威指南中的博客应用程序更复杂的东西 让我们设想一个类似堆栈溢出的应用程序 如何存储基本部分-用户、问题、答案、评论、标签、投票 你认为把数据分成不同的数据库是个好主意吗?例如,将用户放在一个单独的数据库中…或投票/标记 或者不是因为在视图中不能合并来自不同数据库的数据 在关系数据库中构建数据时效果良好的概念同样适用于文档存储数据库。唯一真正发生变化的是,在NoSQL数据库中,通常通过连接在关系数据库上完成的查询通常很

我正在寻找一个关于如何在CouchDB中存储和构造数据的好例子/实践

一些比权威指南中的博客应用程序更复杂的东西

让我们设想一个类似堆栈溢出的应用程序

  • 如何存储基本部分-用户、问题、答案、评论、标签、投票
  • 你认为把数据分成不同的数据库是个好主意吗?例如,将用户放在一个单独的数据库中…或投票/标记
  • 或者不是因为在视图中不能合并来自不同数据库的数据

在关系数据库中构建数据时效果良好的概念同样适用于文档存储数据库。唯一真正发生变化的是,在NoSQL数据库中,通常通过连接在关系数据库上完成的查询通常很麻烦。这意味着通常通过RDBMs上的连接解决的一对多关系通常会涉及NoSQL db上更多的非规范化。在一对多关系的典型示例中,例如博客帖子和该帖子上的评论,您实际上会将帖子中的一些数据复制到评论中,以避免出现额外的查询,而不是在帖子的评论中使用外键,并且您还将保留评论ID的列表(可能还有最近的10个评论机构)在帖子中。

关于在couchdb中进行“连接”:

实际上,不复制数据可能更有意义。以下是我在couchdb中创建的一个视图示例:

这个简单的应用让人们输入挑战,然后让他们收集如何解决这些挑战的想法。它可以很好地转化为博客示例:挑战是博客帖子,想法是适合每个博客帖子的评论

我已将此详细信息发布到此处的另一个问题:


关于在couchdb中构建应用程序,Jason,我也在问同样的问题。couchdb提供了很大的灵活性,所以我不太确定是否应该使用显示和列表来显示数据,或者只是编写客户端代码来实现这一点,可能是使用主干,然后使用couchdb视图来提供模型。让我知道你的想法,我很好奇。

我建议您将各个部分(用户、问题、答案、评论、标签、投票)作为单独的文档存储在一个数据库中

不可以。不要将它们存储在单独的数据库中。您将失去视图的功能,并且必须发出指数级的HTTP请求来收集数据

--

看看吧。这对我来说真的很有帮助。感谢分享链接

虽然本文使用了无处不在的博客示例,但我相信“视图排序”的方法2正是您想要的

作为另一文档的子文档将通过父文档的“\u id”属性链接。此外,您将为文档提供一个“type”属性,以便在视图中返回时对其进行排序。例如:

function(doc) {
  if (doc.type == "post") {
    map([doc._id, 0], doc);
  } else if (doc.type == "comment") {
    map([doc.post, 1], doc);
  }
}
您将返回以下内容:

{
 "total_rows": 5, "offset": 0, "rows": [{
  "id": "myslug",
  "key": ["myslug", 0],
  "value": {...}
}, {
  "id": "ABCDEF",
  "key": ["myslug", 1],
  "value": {...}
}, {
  "id": "DEFABC",
  "key": ["myslug", 1],
  "value": {...}
}, {
  "id": "other_slug",
  "key": ["other_slug", 0],
  "value": {...}
}, {
  "id": "CDEFAB",
  "key": ["other_slug", 1],
  "value": {...}
}]
}
现在,您已经在一个HTTP请求中返回了所有数据、父项和子项。另外,您可以直接通过REST API对这些文档进行CRUD。在我看来,这正是您想要的

您可以对任何具有一对多或多对一关系的对象应用相同的方法

希望这有帮助!

中举例说明的模型有助于理解结构,但我对使用博客主题作为文档id的方法有一点评论。如果两个用户拥有相同的博客标题,这将导致冲突。我是couchdb的新手,但似乎文档id和文档标题应该分开,尽管存在挑战能够加载带有/blogName的blog。这仍然可以通过结构实现吗

{id:6377738426gdjjsb,_rev:1-hsusubsvh6377,title:blogName,authorName:shakespeareND5}

TokenMacGuy,外键,你是指帖子的“id”吗属性?为了方便起见,您可以将重复数据存储在注释对象中?尝试使用Backbone.js实现,因此我在为Backbone的CRUD操作做准备时仔细考虑了这一点。是的,您可以通过将父文档的id添加到子文档的属性中来关联这两个文档。但是,不,反规范化是相当困难的不方便,这通常是为了性能;不过,couchDB可能会在这里为您节省一些视图。您可以分享关于这个主题的任何新发现吗?使用couchDB构建东西有很多方法,这真的取决于您,这是没有模式的利/弊。另外,从您的回答来看,您对它的处理能力比我强做