Mobile/Web 的企业 NoSQL 堆栈解决方案
Enterprise NoSQL Stack Solution for Mobile/Web
我的任务是为我们公司调查一个全栈解决方案,我们将在其中使用 NoSQL 数据库后端。它很可能会近乎实时地从某种类型的数据仓库 and/or 操作数据存储中获取(希望 :)。它将主要由我们的移动和 Web 应用程序通过 REST 使用。
几个requirements/assumptions:
- 它将是只读的(在短期内)并由客户端以 REST 格式使用
- 它必须是可扩展的
- 快速响应时间
- 企业支持——或者如果缺乏实际支持,一些经过行业证明的开源(基本上管理层希望持有
如果堆栈中的某些东西失败了,有人负责)
- 最少的客户端数据转换 - 即:数据应尽可能接近随时可用的格式存储
- 服务API很可能需要某种管理(例如:3scale)
- 服务将在内部使用,但解决方案不应阻止我们将其作为长期目标对外公开
- 最好使用微服务(前提是 API 管理到位)
- 我们的 mobile/portal 解决方案在 Java 和 Grails 方面拥有内部专业知识
我考虑过的一些选项是:
- CouchDB:本质上 returns REST - 不需要转换层 - 作为
只要客户说 REST,我们都很好
- MongoDB:在客户端和数据库之间需要一个 REST 层——根据我的调查还没有找到一个广泛使用的层(Mongo 网站上的那些似乎都在他们的婴儿期 - 即:RestHeart)
我有一些问题:
- 我需要应用服务器吗?或者客户端和数据库之间的任何层
出于 performance/caching 原因?我在想像这样的反向代理
nginx 是个好主意吗?
- 如果 CouchDB 支持开箱即用的 REST,为什么不在此解决方案中使用 CouchDB?
我正在努力决定使用哪个 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/ ? (我没有参与)
我的任务是为我们公司调查一个全栈解决方案,我们将在其中使用 NoSQL 数据库后端。它很可能会近乎实时地从某种类型的数据仓库 and/or 操作数据存储中获取(希望 :)。它将主要由我们的移动和 Web 应用程序通过 REST 使用。
几个requirements/assumptions:
- 它将是只读的(在短期内)并由客户端以 REST 格式使用
- 它必须是可扩展的
- 快速响应时间
- 企业支持——或者如果缺乏实际支持,一些经过行业证明的开源(基本上管理层希望持有 如果堆栈中的某些东西失败了,有人负责)
- 最少的客户端数据转换 - 即:数据应尽可能接近随时可用的格式存储
- 服务API很可能需要某种管理(例如:3scale)
- 服务将在内部使用,但解决方案不应阻止我们将其作为长期目标对外公开
- 最好使用微服务(前提是 API 管理到位)
- 我们的 mobile/portal 解决方案在 Java 和 Grails 方面拥有内部专业知识
我考虑过的一些选项是:
- CouchDB:本质上 returns REST - 不需要转换层 - 作为 只要客户说 REST,我们都很好
- MongoDB:在客户端和数据库之间需要一个 REST 层——根据我的调查还没有找到一个广泛使用的层(Mongo 网站上的那些似乎都在他们的婴儿期 - 即:RestHeart)
我有一些问题:
- 我需要应用服务器吗?或者客户端和数据库之间的任何层 出于 performance/caching 原因?我在想像这样的反向代理 nginx 是个好主意吗?
- 如果 CouchDB 支持开箱即用的 REST,为什么不在此解决方案中使用 CouchDB?
我正在努力决定使用哪个 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/ ? (我没有参与)