Node.js + CouchDB与CouchDB

我在质疑自己为什么应该使用Node.js + CouchDB与CouchDB独立方法的结合。 将Node.jsjoin游戏有什么好处? 任何意见/经验,欢迎。

什么节点可以做和CouchDB不能

Node.js可以使用unix套接字进行进程间通信,实时file upload,它可以启动websocket服务器甚至SPDY服务器。
您可以创build一个DNS服务器,甚至可以处理一些地理定位的东西(MaxMind数据库)。

好东西CouchDB可以做的

但是,使用CouchDB可以做很多有趣的事情,即使它们会更难以实现。 例如,使用_changesfunction,您可以进行进程间通信,一个实时聊天系统(长轮询)。

我不是专家(但CouchDB是我的学习列表中的重中之重),但我想你也可以模拟login用户的会话。

CouchDB和Node.js一样令人吃惊,所以重要的是你计划开发哪个应用程序,你的用例是什么。

还有第三个选项:前面的CouchDB,Node.js在后面…

传统上,数据库是在后端,而不是前端,所以这种configuration似乎有点“倒退”,但是听我说…

在这个configuration中,您仍然可以从CouchDB(而不是Node)为您提供所有的页面,并且您可以使用Node作为一个“工作进程”来轮询数据库中的“作业”,处理它们并插入“结果”回到数据库。 通过这种方式,您可以使用Node的全部function进行特殊处理,但是您可以保留从CouchDB为您的应用程序提供服务的所有好处。

实际上,在这个configuration中,你可以有任何一种运行Python或者Java或者Ruby的专业工作者。 例如,假设您的网站上有“创buildPDF”function,并且您想使用Python来实际创buildPDF。 您只需编写一个python程序,它监视CouchDB中的任何“PDF_Request”文档,处理它们,然后将PDF文件重新插入到CouchDB中。 您没有用Python编写整个应用程序,只需在Python中编写PDF创build函数,然后保持应用程序的其余部分不变。

现在,假设您将CouchApp复制到另一台计算机或移动设备(运行CouchDB,但不运行Node或Python)没问题,您仍然可以在您的CouchDB中插入“PDF_Request”。 当您最终与服务器同步时,您的PDF请求将被pdf创build者程序看到并处理,您将获得您的PDF文件。 您的couchapp仍然在复制的CouchDB上运行,即使“帮助程序”不在那里,因为它们完全脱离了主应用程序。

我不是说这是“走的路”,只是由于CouchDB的本质,这个configuration实际上是一个可行的select,并且会给你带来的好处,如果你把节点放在前面和CouchDB在后面。

尼克的答案是一个特别有趣的。 为了强调这个方法,下面是Mikeal Rogers在CouchOne(?)工作时的一个video,提示了couchdb + node-behind方法: http : //nosql.mypopescu.com/post/2896329122/node-js-couchdb-crazy-好吃 。

另一方面,我认为还有一个领域即使是这种创新的方法落空,这是(更复杂的)安全性。 基本的安全级别可以正常工作,但是如果您希望内容由更高级别的安全级别控制,那么couchdb的map-reduce不会被削减。 但是,一些简单的node.js可以。

所以出于一些安全原因(即为了避免不安全的map-reduce结果),node.js在前端可以更好地实现这些安全措施。

仅供参考。

沙发(couchapp):

显然,couchdb可以做很多很酷的离线工作 – 例如用户离线,继续进行,并在重新连接时同步。 我还没有理由使用这个function,但它对手机的webapps很有意义,我期待着去:

http://googlecode.blogspot.co.uk/2009/09/chris-anderson-couchdb-relaxing-offline.html

node.js被devise为运行服务器端,所以它不太适合这个用例,除了在尼克·珀金斯的答案中描述的体系结构。

节点+沙发

如果你做的不仅仅是一个简单的js应用程序,节点还有一个充满活力的社区,其中包含各种types的库和包,可以做任何事情。

这种方法还可以让你躲在防火墙的后面,只让人们通过你的节点应用程序说话。