我应该使用多个数据库吗?

我即将使用Ruby on Rails创建一个应用程序,我想使用多个数据库,基本上是一个会计应用程序,每个用户将拥有多个公司。 我想为每家公司创建一个数据库

我发现这篇文章http://programmerassist.com/article/302但我想阅读更多关于这个问题的想法。 我必须在MySQL和PosgreSQL之间做出决定,哪个数据库可能更适合我的问题。

处理多租户应用程序有多种选择。

首先,您可以在表格中添加范围(如Chad Birch所建议 – 使用company_id)。 对于大多数用例,这很好。 如果您正在处理安全/私有数据(例如会计信息),则需要非常小心您的测试以确保数据保持私密性。

您可以使用多个数据库运行系统。 您可以拥有一个为每个客户端使用数据库的应用程序,或者您可以为每个客户端实际拥有一个单独的应用程序。 为每个客户端运行一个数据库会削减对rails中的粒度,但它是可行的。 根据您拥有的客户端数量和负载预期,我实际上建议您查看运行单个应用程序。 通过对部署设置(capistrano,厨师,木偶等)的一些工作,您可以使这个过程非常简化。 每个客户端都在一个完全独特的环境中运行,如果某个特定客户端负载很高,您可以将它们转移到自己的服务器上。

如果使用PostgreSQL,您可以使用模式执行类似的操作。 PostgresQL模式提供了一种非常方便的方法来显示来自不同客户端的数据。 数据库包含一个或多个命名模式,而模式又包含表。 您需要为迁移和部署添加一些智能,但它确实很有效。

在Rails应用程序中,您可以将filter附加到打开或关闭当前用户架构的请求。

就像是:

before_filter :set_app def set_app current_app = App.find_by_subdomain(...) schema = current_app.schema set_schema_path(schema) end def set_schema_path(schema) connection = ActiveRecord::Base.connection connection.execute("SET search_path TO #{schema}, #{connection.schema_search_path}") end def reset_schema_path connection = ActiveRecord::Base.connection connection.execute("SET search_path TO #{connection.schema_search_path}") end 

关于多个数据库的答案的问题在于它们来自对多个数据库没有需求或经验的人。 第二个问题是某些数据库不允许在多个数据库之间切换,包括允许用户进行自己的备份和恢复,并包括扩展以将某些用户指向不同的数据服务器。 以下是有用video的链接http://aac2009.confreaks.com/06-feb-2009-14-30-writing-multi-tenant-applications-in-rails-guy-naor.html

这个链接将帮助Ruby on Rails与Postgresql。

我目前有一个多租户,多数据库,多用户(许多登录到具有不同访问级别的同一租户),并且是一个在线SaaS应用程序。 实际上有两个应用程序,一个是会计类别,另一个是银行业务。 两个应用程序都基于相同的结构和方法。 客户端用户(租户)可以在该用户的登录下切换数据库。 代理商用户(如税务会计师)只能在其客户的数据库之间切换。 超级用户可以切换到任何数据库。 有一个数据字典,即只有一个表定义表和列的地方。 有全球数据和本地数据。 全局数据,例如每个人都可以使用的主帐户图表(只读)。 本地数据是用户的数据库。 新用户可以获得主数据库的克隆。 有多个克隆可供选择。 超级用户可以维护克隆数据库。

问题是它在COBOL中并使用ISAM文件并使用CGI方法。 这个问题是:a)人们认为COBOL已经过时,b)受过培训的人,c)价格和d)在线帮助。 否则它会起作用,我很高兴。

所以我正在研究用什么替换它以及什么是雷区。

它已经过去了,其中的决定是使用PostgreSQL模式,制作多租户应用程序,我有一个名为common的模式,其中存储了相关数据。

 # app/models/organisation.rb class Organisation < ActiveRecord::Base self.table_name = 'common.organisations' # set relationships as usual end # app/models/user.rb class User < ActiveRecord::Base self.table_name = 'common.users' # set relationships as usual end 

然后对于迁移我用这个优秀的教程完成了。 http://timnew.github.com/blog/2012/07/17/use-postgres-multiple-schema-database-in-rails/使用这个,这比我在其他地方甚至Ryan的方式看得更好贝茨做过轨道广播。

创建新组织后,将使用组织的子域名创建新架构。 我过去曾经读过,使用不同的模式不是一个好主意,但这取决于你正在做的工作,这个应用程序几乎没有任何社交组件,所以它很适合。

不,您不应该使用多个数据库。

我不太确定会给你什么建议,看起来你对数据库设计有一些非常基本的误解,你可能想先了解数据库的基础知识,然后再继续。

您很可能只想在表中添加“公司ID”类型列,以标识特定记录所属的公司。