我的任务是调查我们公司的全栈解决方案,我们将使用NoSQL数据库后端。它很可能是近乎实时地从某个类型的数据仓库和/或运营数据存储中提供的(希望:)。它主要由我们的移动和Web应用程序通过REST使用。
一些要求/假设:
我折腾的一些选项是:
我有些问题:
我正在努力决定使用哪个NoSQL数据库,我是否需要REST转换层,appserver等等。我已经阅读了每个人的优点和缺点,他们大多说他们会去Mongo - 但是对于我想要做的事情,缺乏成熟的REST层是令人担忧的。
我只是在寻找一些愿意分享的想法,技巧和经验教训。
谢谢!
答案 0 :(得分:1)
将数据库直接暴露给客户端的问题在于,大多数数据库都不支持权限控制,而权限控制的细化程度与您希望的一样。您通常不允许客户端查看和编辑自己的数据,同时也禁止客户端查看和编辑其他用户的任何数据,甚至更糟糕的是服务器本身。至少在你还想要一个理智的数据库模式的时候。
您还经常会遇到这样的情况:您有一个包含多个字段的文档,其中只有一些字段应该由用户控制,而其他字段则不在。例如,我可以编辑此答案的内容,但我无法编辑发布的时间,发布的名称或其投票得分。到目前为止,我从未见过一个可以处理各个字段权限的数据库系统(当有人有:随意在评论中发帖时)。
您可能会考虑尝试在客户端上处理此问题,并且不提供用于编辑所述字段的任何用户界面。但这只能在可信赖的环境中运行。当您有不受信任的用户时,他们可以创建一个客户端应用程序的克隆,它会公开此功能。你无法区分真正的客户端和克隆,特别是当你没有智能应用服务器时(即使那时它实际上是不可能的)。
因此,几乎总是需要在客户端和数据库之间建立一个应用程序服务器来处理客户端的身份验证和权限管理,并且只将这些请求转发到允许的持久层。
答案 1 :(得分:0)
我完全同意@Philipp的回答。在使用CouchDB的情况下,您最少需要使用前面的代理服务器来启用SSL。
CouchDB几乎可以满足您的所有要求。特别是即将推出的v2将为您提供数据中心需求"。
但回答应该是适合您目的的正确工具是非常复杂的。如果你得到一些业务模型要求,比如说:限制 - 那么你肯定需要一个像http://mcavage.me/node-restify/这样的应用服务器中间件
也许花点钱给像这样的专业人士是个好主意 http://www.neighbourhood.ie/couchdb-support/? (我没有参与)