我在质疑自己为什么要使用Node.js + CouchDB与CouchDB独立方法的组合。将Node.js加入游戏有什么好处?欢迎提出任何意见/经验。
答案 0 :(得分:16)
还有第三种选择:CouchDB在前面,Node.js在后面......
传统上,数据库位于后端,而不是前端,因此这种配置看起来有点“向后”,但是听我说......
在此配置中,您仍然可以从CouchDB(而不是Node)提供所有页面,并使用Node作为一种“工作进程”,轮询数据库中的“作业”,处理它们并插入“结果”回到数据库中。通过这种方式,您可以使用Node的全部功能进行特殊处理,但是您可以从CouchDB中获得为应用程序提供服务的所有好处。
实际上,在这种配置中,您可以拥有运行Python或Java或Ruby等任何类型的专业工作者。例如,假设您的网站上有“创建PDF”功能,并且您希望使用Python来实际创建PDF。您只需编写一个python程序,查看CouchDB中的任何“PDF_Request”文档,处理它们,然后将PDF文件插回到CouchDB中。你没有用Python编写你的整个应用程序,你可以用Python编写你的PDF Create函数,并保持你应用程序的其余部分不变。
现在,假设您将CouchApp复制到另一台计算机或移动设备(运行CouchDB但不运行Node或Python)没问题,您仍然可以在CouchDB中插入“PDF_Request”。当您最终与服务器同步时,您的PDF请求将由pdf创建者程序查看和处理,您将获得PDF文件。你的couchapp仍然在复制的CouchDB上运行,即使那里没有“帮助程序”,因为它们与主应用程序完全分离。
我并不是说这是“要走的路”,只是因为CouchDB的性质,这种配置实际上是一个可行的选择,并且会为您带来扩展和复制的好处,如果你不能把Node放在前面,把CouchDB放在后面。
答案 1 :(得分:7)
Node可以做什么,而CouchDB不能
Node.js可以使用unix套接字进行进程间通信,实时文件上传,可以启动websocket服务器甚至是SPDY服务器。
您可以创建DNS服务器,甚至可以处理一些地理位置定位(MaxMind db)。
CouchDB可以做的好事
然而,使用CouchDB可以做很多有趣的事情,即使它们有点难以实现。例如,使用_changes功能,您可以进行进程间通信,即实时聊天系统(长轮询)。
我不是专家(但CouchDB是我的学习列表的首要任务),但我想你也可以模拟登录用户的会话。
CouchDB很棒,Node.js也是如此,所以重要的是你计划开发什么应用程序,你的用例是什么。
答案 2 :(得分:3)
另一方面,我认为有一个领域即使是那种创新方法也会失败,而且安全性更高。基本安全级别工作正常,但如果您希望内容受更复杂的安全级别控制,则couchdb的map-reduce不会减少。但是,一些简单的node.js可以。
因此,出于某些安全原因(即,为了避免不安全的map-reduce结果),node.js可能在前端更好地实现这些安全措施。
FYI。
答案 3 :(得分:2)
http://googlecode.blogspot.co.uk/2009/09/chris-anderson-couchdb-relaxing-offline.html
node.js旨在运行服务器端,因此它不适合这个用例,除了在nick perkins的答案中描述的体系结构。
节点+沙发
如果你做的不仅仅是一个简单的js app,节点有一个充满活力的社区,各种各样的库和包可以做任何事情。
这种方法还允许您隐藏在防火墙后面的沙发,并且只允许人们通过您的节点应用与它通话。
答案 4 :(得分:0)
在CouchDB数据库之前使用NodeJS的好处之一是,在实现约束时您将获得更大的灵活性。
CouchDB仅允许您在设计文档中编写验证功能,以检查正在创建/更新/删除的文档。无法从设计文档中访问存储在数据库中的其他文档。
如果需要在插入Y之前检查文档X是否存在,则可能需要此功能。