- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试确定 CouchApp(无中间件)的最佳方法。由于与我的想法有相似之处,让我们假设我们有一个存储在 CouchDB 中的 stackoverflow 页面。本质上,它由顶部的实际问题、答案和commets 组成。这些基本上是三层。
有两种存储方式。要么在包含数据的合适 JSON 表示的单个文档中,要么将条目的每个部分存储在单独的文档中,稍后通过 View 将它们组合起来(类似于: http://www.cmlenz.net/archives/2007/10/couchdb-joins )
现在,这两种方法可能都不错,但从我目前的观点来看,两者都有很大的缺点。将繁忙的文档(预计会通过多个用户进行许多更改)作为信号实体存储会导致发生冲突。如果用户 A 存储他/她对文档的更改,则用户 B 将在他/她完成输入他/她的更新后收到冲突错误。我可以想象在用户不知情的情况下通过在重试之前重新下载文档来解决这个问题是可能的。
但是如果文档比较大怎么办?我会排除它们随着时间的推移变得相当爆炸,这会在保存过程中产生相当明显的延迟,特别是如果由于许多用户同时更新文档而必须多次发生重试过程。
我看到的另一个问题是编辑。每个用户都应该被允许编辑他/她的贡献。现在,如果它们存储在一个文档中,则可能很难编写可靠的身份验证处理程序。
好的,现在让我们看看多文档方法。问题、答案和评论将存储在他们自己的文档中。优点:只有文档的实际所有者才能引起冲突,这种情况不会经常发生。作为整体中相当小的元素,重新下载不会花费太多时间。此外,身份验证例程应该很容易实现。
现在是缺点。单个文档非常易于查询和显示。放置大量未排序的片段似乎是一件困惑的事情,因为我并没有真正获得实际 View 来向我展示一个 100% 准备使用的 JSON 对象,其中包含有序和结构化格式的整个项目。
我希望我已经能够传达实际问题。我尝试决定哪种解决方案更适合我,哪些问题更容易克服。我想象第一个解决方案在存储和查询方面更漂亮,而第二个解决方案更实用,可以通过 View 中更好的 key 管理来解决(我还没有完全了解 key 的原理)。
非常感谢您提前提供帮助:)
最佳答案
选择第二个选项。这比处理冲突要容易得多。以下是我如何构造数据的一些示例文档:
{
_id: 12345,
type: 'question',
slug: 'couchdb-single-document-vs-joining-documents-together',
markdown: 'Im tryting to decide the best approach for a CouchApp (no middleware). Since there are similarities to...' ,
user: 'roman-geber',
date: 1322150148041,
'jquery.couch.attachPrevRev' : true
}
{
_id: 23456,
type: 'answer'
question: 12345,
markdown: 'Go with your second option...',
user : 'ryan-ramage',
votes: 100,
date: 1322151148041,
'jquery.couch.attachPrevRev' : true
}
{
_id: 45678,
type: 'comment'
question: 12345,
answer: 23456,
markdown : 'I really like what you have said, but...' ,
user: 'somedude',
date: 1322151158041,
'jquery.couch.attachPrevRev' : true
}
fullQuestion : {
map : function(doc) {
if (doc.type == 'question') emit([doc._id, null, null], null);
if (doc.type == 'answer') emit([doc.question, doc._id, null], null);
if (doc.type == 'comment') emit([doc.question, doc.answer, doc._id], null) ;
}
}
http://localhost:5984/so/_design/app/_view/fullQuestion?startkey=['12345']&endkey=['12345',{},{}]&include_docs=true
fullQuestion : {
map : function(doc) {
if (doc.type == 'question') emit([doc._id, doc.date], null);
if (doc.type == 'answer') emit([doc.question, doc.date], null);
if (doc.type == 'comment') emit([doc.question, doc.date], null);
}
}
http://localhost:5984/so/_design/app/_view/fullQuestion?startkey=['12345']&endkey=['12345',{}]&include_docs=true
function addAnswer(doc) {
$('.answers').append(answerTemplate(doc));
}
function addCommentToAnswer(doc) {
$('#' + doc.answer).append(commentTemplate(doc));
}
$.each(results.rows, function(i, row) {
if (row.doc.type == 'question') displyQuestionInfo(row.doc);
if (row.doc.type == 'answer') addAnswer(row.doc);
if (row.doc.type == 'comment') addCommentToAnswer(row.doc)
})
关于CouchDB:单个文档与 "joining"个文档放在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8255670/
我正在设计一个用于任务管理的移动应用程序(待办事项列表以及许多额外的好东西),可以离线使用并在重新连接时同步。 Couch 和 Pouch DB 给我留下了深刻的印象,但我仍然不确定数据库和角色的最佳
CouchDB 中如何实现多范围查询?对于单个范围条件, startkey 和 endkey 组合工作正常,但同样的事情不适用于多范围条件。 我的 View 函数是这样的: "function(doc
是否可以在不同的 CouchDB 数据库之间进行连接?我知道,我可以将所有数据放入同一个数据库中,但我想使用 Ubuntus DesktopCouch,它有一些默认数据库,比如我想使用的联系人和笔记。
给定以下对象结构: { key1: "...", key2: "...", data: "..." } 有没有办法通过查询 key1 和 key2 而不设置两个不同的 View (每
我从 CouchDB 开始,需要一点帮助。 我有很多数据在表中列出给用户。用户应该能够通过多个动态参数过滤该数据。 例如。假设有一个包含日期、作者、标签、is_published、标题字段的表。 用户
刚刚在 mac 山狮上使用 brew 安装了 CouchDb。一切顺利,直到我遇到以下问题启动服务器我不知道 erlnag 并且无法分析转储文件 `couchdb Apache CouchDB 1.2
在使用关系数据库工作了这么长时间后,我真的很努力地理解这个新概念...... 谁能解释我应该如何进行存储,比如类别层次结构? 在关系数据库中,我有: 类别: 类别编号 父类别 ID 姓名 或那种性质的
我希望有人可以在这里验证或更正我的结论。 我正在考虑写一个小的副项目。我想创建一个用于记笔记的桌面应用程序,该应用程序将同步到 Web 服务器,以便多个安装可以保持同步并共享数据,并且如果需要,还可以
我试图在单个 CouchDB 文档中存储多个独立附件,并为每个附件分配任意属性(即描述)。是否有这样做的约定?据我所知,我无法将它们插入 _attachments直接构造。提前致谢! 最佳答案 您不能
关闭。这个问题是opinion-based .它目前不接受答案。 想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题. 2年前关闭。 Improve t
这些功能是什么? 我在哪里可以阅读有关它们如何工作的信息? CouchDB 权威指南没有解释它,很奇怪。 最佳答案 来自 CouchDB 权威指南: There are other design do
我一直在阅读 Linked documents在 CouchDb 文档中,它看起来很好。 但是是否可以在数据库 A 中编写一个 View 来从数据库 B 发出文档?我需要它,因为我们在不同的数据库中存
使用 CouchDB 1.0.1。 我删除了一些文件,然后我放了一些其他的文件 _id作为删除的。 现在这些新文档有 _deleted_conflicts field : "_deleted_conf
我想实现一个 webapp - 一个集成来自各种来源的数据并将它们显示给用户的提要。用户应该只能看到他有权阅读的提要项目(例如,因为它们属于他所属的项目)。但是,许多用户可能(并且将会)看到一个提要项
我是 CouchDB 的新手并正在学习它。我没有遇到 CouchDB 对参照完整性的支持。 我们可以为 CouchDB 文档中的字段创建外键吗? 例如是否可以确保供应商数据库中提供订单文档中使用的供应
是否有任何技术/建议来强制执行独特的约束?是的,我们可以创建唯一的 key ,但我们不能更改 key 和 key ,而且这种方法不适合复杂的验证(单独的唯一登录、单独的唯一电子邮件等...) 例如,一
我有一个问题,我已经尝试回答一段时间了,但无法弄清楚: 您如何设计或划分 CouchDB 文档? 以博客文章为例。 半“关系”方法是创建一些对象: 发帖 用户 评论 标签 片段 这很有道理。但我正在尝
CouchDB 可以在同一台机器上处理数千个独立的数据库吗? 假设您有一组 BankTransaction。有数千条记录。 (编辑:实际上并不存储事务——只需考虑大量非常小的、频繁更新的记录。它基本上
我有一个 CouchDB 数据库,主要存储文档附件。 文件存储在数据库中,URL 结构如下:/db-name/numeric-file-id/official-human-readable-file-
我正在阅读 Apress 的《Beginning CouchDB》一书,其中有一行让我有点困惑: Also important to note is that CouchDB will never o
我是一名优秀的程序员,十分优秀!