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

时间:2015-04-14 13:48:45

标签: mongodb mobile couchdb nosql

我的任务是调查我们公司的全栈解决方案,我们将使用NoSQL数据库后端。它很可能是近乎实时地从某个类型的数据仓库和/或运营数据存储中提供的(希望:)。它主要由我们的移动和Web应用程序通过REST使用。

一些要求/假设

  • 它将是只读的(在短期内)并由REST格式的客户端使用
  • 必须具有可扩展性
  • 快速响应时间
  • 企业支持 - 或者如果缺乏实际支持,那么在开源(基本上管理层希望持有)的情况下,行业就会证明这一点 如果堆栈中的某些内容失败,则有人负责)
  • 最小的客户端数据转换 - 即:数据应尽可能接近即用型格式存储
  • 很可能需要某种服务API管理(例如:3scale)
  • 服务将在内部使用,但解决方案不应阻止我们将其作为长期目标在外部公开
  • 最好是微服务(如果有足够的API管理)
  • 我们在移动/门户解决方案方面拥有Java和Grails的内部专业知识

我折腾的一些选项是:

  • CouchDB:固有地返回REST - 不需要翻译层 - 如 只要客户说REST,我们一切都很好
  • MongoDB:在客户端和数据库之间需要一个REST层 - 根据我的调查找不到一个广泛使用的层(Mongo网站上的那些似乎都处于起步阶段 - 即:RestHeart)< / LI>

我有些问题:

  • 我需要一个appserver吗?或者客户端和数据库之间的任何层 出于性能/缓存的原因?我在考虑反向代理 nginx对此有好处吗?
  • 如果它支持开箱即用的REST,为什么不在此解决方案中使用CouchDB?

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

我只是在寻找一些愿意分享的想法,技巧和经验教训。

谢谢!

2 个答案:

答案 0 :(得分:1)

将数据库直接暴露给客户端的问题在于,大多数数据库都不支持权限控制,而权限控制的细化程度与您希望的一样。您通常不允许客户端查看和编辑自己的数据,同时也禁止客户端查看和编辑其他用户的任何数据,甚至更糟糕的是服务器本身。至少在你还想要一个理智的数据库模式的时候。

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

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

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

答案 1 :(得分:0)

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

CouchDB几乎可以满足您的所有要求。特别是即将推出的v2将为您提供数据中心需求&#34;。

但回答应该是适合您目的的正确工具是非常复杂的。如果你得到一些业务模型要求,比如说:限制 - 那么你肯定需要一个像http://mcavage.me/node-restify/这样的应用服务器中间件

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

相关问题