考虑将多个客户端的 Web(MVC,例如 Rails)应用程序作为服务。
这个怎么设计?
每个客户端一个应用程序实例?(+ 每个客户端一个数据库)
所有客户端一个实例(+所有客户端一个数据库)
前一个很简单,但是……“效率低下”。后者怎么样?(最佳实践、设计模式)如何分离客户端数据?例如:客户端“1”的工作人员“A”有两个文档,客户端“2”的工作人员“B”有三个文档。如何建立模型关联来保护其他用户(和客户端)数据?我认为使用 Client 模型加入每个查询并不是一个好的解决方案。
考虑将多个客户端的 Web(MVC,例如 Rails)应用程序作为服务。
这个怎么设计?
每个客户端一个应用程序实例?(+ 每个客户端一个数据库)
所有客户端一个实例(+所有客户端一个数据库)
前一个很简单,但是……“效率低下”。后者怎么样?(最佳实践、设计模式)如何分离客户端数据?例如:客户端“1”的工作人员“A”有两个文档,客户端“2”的工作人员“B”有三个文档。如何建立模型关联来保护其他用户(和客户端)数据?我认为使用 Client 模型加入每个查询并不是一个好的解决方案。
这篇MSDN文章很好地解释了多租户数据架构。
可能很明显,但无论如何我都会注意到它;Rails 实例的默认配置是在客户端将会话信息存储在 cookie 中,这有助于让所有应用程序实例都能平等地为请求提供服务。
该系列中的另一篇文章在识别共享服务(例如您需要的监控)方面也提供了丰富的信息。
我建议看一下关于 Ruby on Rails 中多租户应用程序的早期响应。
这实际上取决于您的用例,但处理此问题的最简单方法是单个数据库,其范围限定为特定应用程序。您可以根据您的要求/预算从那里前往。
我是该链接中详细介绍的 postgresql 模式系统的忠实粉丝:P