Couchdb _replicator数据库不可扩展,或者我的设计需要调整

Couchdb _replicator数据库不可扩展,或者我的设计需要调整,couchdb,pouchdb,couchdb-2.0,Couchdb,Pouchdb,Couchdb 2.0,我认为详细说明我来自何处是很重要的,这样您就可以理解我的用例,请耐心听我说 背景:我正在考虑将我的应用程序从CouchDB 1迁移到2,这次迁移需要相当多的工作。我只是想再次确认我没有重新发明轮子,并确保没有更好的设计,特别是因为CouchDB 2似乎有一些很棒的新特性 考虑以下一个应用程序的简化用例,该应用程序允许学生以数字方式提交测验答案。每个学生都应该能够提交自己的测验答案,老师应该能够查看所有答案。这种设计需要使用PockDB,因为PockDB直接与DB对话,这为我们节省了大量时间,否则

我认为详细说明我来自何处是很重要的,这样您就可以理解我的用例,请耐心听我说

背景:我正在考虑将我的应用程序从CouchDB 1迁移到2,这次迁移需要相当多的工作。我只是想再次确认我没有重新发明轮子,并确保没有更好的设计,特别是因为CouchDB 2似乎有一些很棒的新特性

考虑以下一个应用程序的简化用例,该应用程序允许学生以数字方式提交测验答案。每个学生都应该能够提交自己的测验答案,老师应该能够查看所有答案。这种设计需要使用PockDB,因为PockDB直接与DB对话,这为我们节省了大量时间,否则需要编写一套复杂的API

我选择的设计包括每个学生一个数据库和每个教师一个数据库,即每个用户一个数据库。只有数据库的所有者才能编辑她/他的数据库,这是通过CouchDB角色强制执行的。当学生提交答案时,答案通过数据库与她/他的数据库同步。然后将答案复制到教师数据库中。这反过来又允许学生在应用程序中快速加载他们的答案,而教师可以加载所有学生的所有答案。当然,教师数据库中有按班级、测验等对答案进行分段的视图,这样教师就不必一次加载所有学生的答案。若我们并没有教师数据库,那个么教师将需要访问所有学生的数据库,并且必须和所有学生的数据库同步

乍一看,_replicator数据库似乎是将数据从学生数据库复制到单个教师数据库的明显方式。最大的问题是,当您使用连续复制时,它会消耗一个文件句柄和一个数据库连接,这意味着您可以很快耗尽数据库的资源。例如,如果我们的数据库中有10000名学生,那么我们需要10000个并发文件句柄和数据库连接来进行复制。考虑到这10000名学生中有100人不可能同时使用该应用程序,这真是太疯狂了

相反,我开发了一个服务,它侦听_db_updates提要,然后仅在特定数据库发生更改时复制数据库。使用这种方法,我们只需要担心在发生更改时消耗资源,结果我们会得到大量的免费文件句柄和数据库连接

我已经对CouchDB 2进行了简单的实验,看起来_replicator数据库和CouchDB 1一样贪婪地使用资源


这种针对学生和教师的按用户设计的数据库是最佳解决方案还是有更好的解决方案?如果这是最好的解决方案,那么有没有更好的方法来复制这些数据而不消耗那么多资源?

我已经将我的解决方案开源,名为,它提供了缺少的部分:可扩展的CouchDB复制和更改侦听。Spiegel目前在生产中使用的是每用户db设计,并有效地处理了10000多个数据库的复制。

您主要是从PockDB同步到CouchDB吗?或者你在做本地沙发同步?好吧,从学生到教师DBs的复制是CouchDB到CouchDB。与移动应用程序同步的是CouCHDB到PouCHDBI将考虑用Con作业或类似的方式进行沙发床复制,而不是进行数千个长时间运行的复制。但是知道它是否有问题的唯一方法可能是尝试它。它可以工作,但需要大量的自定义代码。我只是想在我开始将我的解决方案移植到CouchDB 2之前,看看是否有人有更好的使用原生CouchDB结构的设计。为了使我的解决方案具有可扩展性,并以开源的形式正确发布,这需要大量的工作。不久的将来,CouchDB版本将以本机方式解决这个问题: