适用于移动/Web的企业NoSQL堆栈解决方案



我的任务是为我们公司研究一个全栈解决方案,我们将使用NoSQL数据库后端。它很可能是从数据仓库和/或某种类型的操作数据存储中以近乎实时的方式提供的(希望是:)。它将主要由我们的移动和web应用程序通过REST.使用

一些要求/假设

  • 它将是只读的(短期内),并由客户端以REST格式使用
  • 它必须是可扩展的
  • 快速响应时间
  • 企业支持——或者如果缺乏实际支持,如果开源(基本上是管理层想要持有的如果堆栈中的某个东西出现故障,则有人负责)
  • 最少的客户端数据转换-即:数据应存储在尽可能接近随时可用的格式中
  • 最有可能需要某种类型的服务API管理(例如:3规模)
  • 服务将在内部使用,但解决方案不应阻止我们将其作为长期目标对外公开
  • 最好提供微服务(前提是API有足够的管理)
  • 我们的移动/门户解决方案拥有Java和Grails方面的内部专业知识

我抛出的一些选项是:

  • CouchDB:固有地返回REST-不需要转换层-作为只要客户说REST,我们都很好
  • MongoDB:在客户端和DB之间需要一个REST层-根据我的调查,还没有找到一个广泛使用的层(Mongo网站上的那些似乎都还处于起步阶段,即:RestHeart)

我有一些问题:

  • 我需要一个应用服务器吗?或者客户端和数据库之间的任何层出于性能/缓存原因?我在想一个反向代理nginx会是个好主意吗
  • 如果CouchDB支持开箱即用的REST,为什么不在这个解决方案中使用它呢

我正在努力决定使用哪一个NoSQL数据库,是否需要REST翻译层、appserver等。我已经阅读了每一个的优缺点,他们大多说去Mongo,但对于我试图做的事情,缺乏成熟的REST层是令人担忧的。

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

谢谢!

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

您还经常会发现,您有一个包含多个字段的文档,其中只有一些字段应该由用户控制,而其他字段则不受用户控制。例如,我可以编辑这个答案的内容,但我不能编辑它发布的时间、发布的名称或投票分数。到目前为止,我从未见过一个数据库系统可以处理单个字段的权限(当任何人都有权限时:请随意在评论中发布)。

您可能会考虑在客户端上尝试处理此问题,但不提供任何用于编辑所述字段的用户界面。但这只能在一个值得信赖的环境中发挥作用。当您有不受信任的用户时,他们可以创建客户端应用程序的克隆,从而公开此功能。你无法区分真正的客户端和克隆,尤其是当你没有智能应用程序服务器时(即使在那时,这实际上也是不可能的)。

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

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

CouchDB几乎可以满足您的所有需求。特别是即将推出的v2将满足您的"数据中心需求"。

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

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

最新更新