Mobile/Web 的企业 NoSQL 堆栈解决方案

Enterprise NoSQL Stack Solution for Mobile/Web

我的任务是为我们公司调查一个全栈解决方案,我们将在其中使用 NoSQL 数据库后端。它很可能会近乎实时地从某种类型的数据仓库 and/or 操作数据存储中获取(希望 :)。它将主要由我们的移动和 Web 应用程序通过 REST 使用。

几个requirements/assumptions:

我考虑过的一些选项是:

我有一些问题:

我正在努力决定使用哪个 NoSQL 数据库,是否需要 REST 转换层、应用程序服务器等。我已经阅读了每个的优缺点,大多数人都说可以 Mongo - 但对于我正在尝试做的事情,缺乏成熟的 REST 层是令人担忧的。

我只是在寻找一些想法、技巧和经验教训,任何人都愿意分享。

谢谢!

将数据库直接暴露给客户端的问题是,大多数数据库不支持权限控制,而权限控制是你想要的那样细粒度。您通常不能允许客户端查看和编辑自己的数据,同时也禁止它查看和编辑其他用户的任何数据,甚至更糟的是来自服务器本身的数据。至少当您仍然想要一个健全的数据库模式时不会。

您还会发现自己经常遇到这样的情况,即您有一个包含多个字段的文档,其中只有一些字段应该在用户的控制之下,而其他的则不然。例如,我可以编辑此答案的内容,但我无法编辑 posted 的时间、posted 的名称或其投票分数。到目前为止,我从未见过可以处理单个字段权限的数据库系统(如果有人有:随时在评论中post)。

您可能会考虑尝试在客户端处理此问题,但不提供任何用于编辑上述字段的用户界面。但这只会在受信任的环境中起作用。当您有不受信任的用户时,他们可以创建您的客户端应用程序的克隆,该应用程序确实公开了此功能。您无法分辨真正的客户端和克隆客户端之间的区别,尤其是当您没有智能应用程序服务器时(即使那样也几乎不可能)。

出于这个原因,几乎总是需要在客户端和数据库之间有一个应用服务器来处理客户端的身份验证和权限管理,并且只将那些请求转发到允许的持久层。

非常同意@Philipp 的回答。在使用 CouchDB 的情况下,您至少需要在前面使用代理服务器来启用 SSL。

CouchDB 几乎可以满足您的所有需求。特别是即将推出的 v2 会给你 "datacenter-needs".

但是要回答什么才是适合您目的的正确工具,这非常复杂。如果您有一些业务模型要求,例如:节流 - 那么您肯定需要一个应用程序服务器中间件,例如 http://mcavage.me/node-restify/

也许花一些钱给像这样的专业人士是个好主意 http://www.neighbourhood.ie/couchdb-support/ ? (我没有参与)