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

2023-12-15

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

我找到了这个帖子http://programmerassist.com/article/302但我想阅读更多关于这个问题的想法。 我必须在 MySQL 和 PosgreSQL 之间做出选择,哪个数据库更适合我的问题。


有多种选项可用于处理多租户应用程序。

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

您可以使用多个数据库来运行系统。您可以拥有一个为每个客户端使用数据库的应用程序,也可以为每个客户端拥有一个单独的应用程序。为每个客户端运行一个数据库会稍微影响 Rails 的性能,但这是可行的。根据您拥有的客户端数量和负载预期,我实际上建议看看运行单个应用程序。通过对部署设置(capistrano、chef、puppet 等)进行一些工作,您可以使其成为一个非常简化的过程。每个客户端都在完全独特的环境中运行,如果特定客户端负载较高,您可以将它们分派到自己的服务器上。

如果使用 PostgreSQL,您可以使用模式执行类似的操作。PostgresQL 模式提供一种非常方便的方法来将您的数据与不同的客户端隔离。数据库包含一个或多个命名模式,而这些模式又包含表。您需要在迁移和部署中添加一些智能功能,但它效果非常好。

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

就像是:

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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我应该使用多个数据库吗? 的相关文章

  • 如何使用Factory Girl生成回形针附件?

    我有一个包含许多图像的模型 Person 其中图像有一个称为数据的回形针附件字段 下面显示了缩写版本 class Person has many images end class Image has attached file data b
  • Postgres - 如何在插入时自动调用 ST_SetSRID(ST_MakePoint(lng, lat), 4326)?

    我正在使用postGIS 并且我对SQL不是很熟悉 我可以成功插入到我的markers表只要我做这样的事情 伪代码 INSERT INTO markers created by title description lat lng geogr
  • 如何跳过 Devise SessionsController 的 before_filter ?

    我有一个before filter in my ApplicationController 也就是说 对于我的项目中的每个控制器 我怎么能够skip before filter对于设计的SessionsController创造行动 这是我的
  • PostgreSQL 中字符串列类型的索引数组

    是否可以在类型为的列上创建索引文本数组 尝试使用GIN索引 但查询似乎没有使用这些索引 Example CREATE TABLE users name VARCHAR 100 groups TEXT Query SELECT name FR
  • ruby on Rails,会话过期通知

    我正在使用 ruby 1 9 3 和 Rails 3 2 我的实际会话处理如下所示 会话助手 def sign in user cookies remember token value user remember token expires
  • 如何使用 Ruby 2.7.0 修复 Rails 的警告消息

    有没有人解决这个问题Ruby 2 7 0 I used rbenv并安装了 Ruby v2 7 0 然后使用创建了一个 Rails 项目Rails v6 0 2 1 目前 通过运行之一 rails s rails s u puma rail
  • 使用 Greasemonkey 时存储数据

    使用 Greasemonkey 时是否有存储大量数据的好方法GM setValue只是没有削减它 那么这里有一些选项 设置服务器来保存数据 对于用户 并使用 xhr 来 创建 编辑 删除数据 谷歌应用程序 发动机 GAE http code
  • 使用 Keycloak 和 Spring Boot 的多租户

    我正在使用 spring boot 适配器和 keycloak spring boot 适配器来执行多租户 我可以使用 ip 和域名访问页面 但是当我运行 gradlew 脚本时 似乎没有检测到这个 bean 也没有发生任何变化 即使在我添
  • Memcachier 达到缓存限制时 Heroku 请求超时

    我使用 Memcachier Dalli 作为客户端 将 Rails 应用程序部署到 Heroku 我正在使用免费插件 提供 25 MB 缓存 我们开始收到来自heroku的请求超时 经过调试 我们发现手动刷新Memcachier解决了问题
  • 社交应用程序的数据库设计和优化注意事项

    通常的情况 我有一个简单的应用程序 允许人们上传照片并关注其他人 因此 每个用户都会有类似 墙 或 活动源 的东西 他或她可以在其中看到他 她的朋友 他或她关注的人 上传的最新照片 大多数功能都很容易实现 然而 当涉及到这个历史活动源时 由
  • 自定义变形在rails3上不起作用?

    我正在使用 Rails 3 0 1 并在initializers inflections rb 中有以下代码 ActiveSupport Inflector inflections do inflect inflect irregular
  • Scrapy - 持续从数据库中获取要爬取的url

    我想不断地从数据库中获取要爬行的网址 到目前为止 我成功地从基地获取了 url 但我希望我的蜘蛛继续从该基地读取 因为该表将由另一个线程填充 我有一个管道 一旦爬行 工作 就会从表中删除 url 换句话说 我想使用我的数据库作为队列 我尝试
  • kaminari ajax 分页不更新分页

    我正在使用 kaminari gem 在 Rails3 中实现分页 我一直在关注github上的这段代码https github com amatsuda kaminari example commits ajax https github
  • 如何从rails控制台将数据添加到数据库

    我有一个User model gt gt u User new gt
  • Mysql 中 UNION 子句的替代方案

    我有两张桌子 表 a 表 b table a ID 1 2 3 4 5 7 table b ID 2 3 4 5 6 我必须得到这样的输出而无需UNION命令 ID 1 2 3 4 5 6 7 注意 我有一个联合解决方案 select fr
  • 回形针不支持 .doc 文件

    在 Rails 4 0 2 中 我使用回形针 gem 上传文件 但它不支持 doc 文件 在文件上传字段下方 显示一条错误消息 扩展名与其内容不匹配 在模型中 检查内容类型的验证如下 validates attachment content
  • Rails 3 Mechanize - SocketError:getaddrinfo:主机或名称未知

    我正在使用 mechanize 但出现此错误 有人可以帮帮我吗 我已将元刷新设置为 true 错误日志 SocketError getaddrinfo Host or name not known form C Ruby192 lib ru
  • Rails 3.1 和图像资源

    我已将管理主题的所有图像放入名为 admin 的文件夹内的资产文件夹中 然后我像平常一样链接到它 Ruby image tag admin file jpg CSS logo background url assets images adm
  • 为什么 Rails 中的区域设置充当全局(使用 Thin 时)?

    我刚刚意识到在控制器中设置区域设置的推荐 Rails 方法 before filter set locale def set locale I18n locale params locale I18n default locale end
  • 将第三个表链接到多对多关联中的桥接表

    设计这个数据库的正确方法是什么 这是我设置表格的方式 我在名为 教师 的表和名为 仪器 的表之间存在多对多关系 然后我有一个连接两者的桥接表 我想将另一个表与 BRIDGE 表关联起来 意思是乐器 老师的组合 该表有 3 行 指定老师可以教

随机推荐

  • UItableViewCell 与 UIDatePicker :月份列被覆盖

    在 InterfaceBuilder Xcode 6 1 中 UITableViewCell 的 contentView 上的 UIDateTimePicker 被白色瓷砖覆盖 如何预防呢 更新 此问题已从 iOS9 beta 5 解决 2
  • 使用从 lxml xpath 命令获取的数据填充 Python 列表

    我正在从以 xml 格式提供信息的专业服务器读取仪器数据 我写的代码是 从 lxml 导入 etree 作为 ET xmlDoc ET parse http 192 168 1 198 Bench read xml print ET tos
  • 在 matplotlib 中动态添加/创建子图

    我想创建一个由多个具有共享 x y 轴的子图组成的图 从文档来看它应该看起来像这样 尽管我的子图将是散点图 代码在这里 但我想动态创建子图 因此 子图的数量取决于前一个函数的输出 每个图可能有大约 3 到 15 个子图 每个子图都来自不同的
  • 存储过程中的 SQL 默认架构解析

    在 MS SQL 2008 R2 中 我凭经验发现 在以下 SQL 中 存储过程从定义该过程的同一架构中的表中返回数据 但如果没有这样的架构 则将默认返回到用户的默认架构被发现 虽然这看起来很合乎逻辑 但是否有人有章节介绍 MSSQL 在访
  • adb 服务器已过时。杀戮[重复]

    这个问题在这里已经有答案了 我正在使用本教程创建我的第一个反应本机项目 http facebook github io react native 当涉及到执行代码和运行时react native run android我正进入 状态 adb
  • jquery中div从右到左调整大小

    I 想要从右到左设置 div 标签的动画并调整其大小 默认情况下 我从示例中学习并发现它从左到右调整大小 但根据项目要求 我们希望将其按从右到左的顺序排列 我写的代码是 div style background url stripes JP
  • 在Java中如何连接两个字符串?

    我正在尝试在 Java 中连接字符串 为什么这不起作用 public class StackOverflowTest public static void main String args int theNumber 42 System o
  • 通过 HTML/css 关闭 Chrome/Safari 拼写检查 [重复]

    这个问题在这里已经有答案了 有没有办法对于网络开发人员关闭特定的 Chrome Safari WebKit 拼写检查input or textarea元素 我的意思是通过特殊的标签属性或专有的 CSS 指令 有一个CSS指令可以关闭大纲in
  • Visual Studio 2015 社区 Xamarin 跨平台模板缺失

    我使用 Xamarin 安装了 Visual Studio 2015 Community Update 3 更新了 Xamarin 一切正常 但突然 当我尝试创建新项目时 Xamarin 跨平台模板丢失了 我不再有这些模板了 我只有这些 我
  • 将复杂的字符串解析为日期时间

    有人可以告诉我应该如何将以下格式转换为正确的格式DateTime object 11 50 46 AM on Wednesday October 19 2011 string s 11 50 46 AM on Wednesday Octob
  • C# 运行程序并获取运行后的环境变量

    我尝试使用 C 运行两个批处理脚本 然后查看它们如何影响环境 我的代码是 string finalEnvVarsFile Path GetTempFileName string arguments string Format c 0 1 s
  • Git 子树。为什么我不能从子树而不是根开始分支?

    我正在努力尝试理解使用 Git 子树策略 我的目的是将一些不同的存储库整合到一个伞形存储库下的一个玩具存储库小家族中 我正在使用此处详细介绍的子树策略 http help github com subtree merge 我正在绞尽脑汁地试
  • 由用户重命名的按钮

    我在编写某些按钮时遇到问题 这是我到目前为止所得到的 Public Class Form1 Dim Button 12 As Button Dim X As Integer Private Sub EventName Dim message
  • C++ 带权重的随机不重复整数

    我想有效地生成 封闭 范围内唯一 非重复 整数的随机样本 0 rnd max 范围内的每个数字都可以选择 并且每个数字都与样本权重相关联 权重越大 选择该数字的可能性就越大 概率恰好weight i sum weight not taken
  • @property 和 @synthesize 在 Objective-C 中的用途是什么?

    有什么用 财产 and 合成 您能举个例子解释一下吗 非常简短的答案 他们为 ivars 创建访问器 有维基百科上的一些例子 看看那些
  • Matlab:是否有一个函数可以定位数字中的“n”位(即“75673”中的第二位数字,所以5)

    我有一个号码A 7654321 我需要位置 5 处的数字 从开头算起 或从末尾算起的数字 3 在本例中为 3 是否有一个函数可以执行以下操作 getdigit A n 其中 A 是数字 n 是我想要的数字的位置 我可以将数字转换为文本字符串
  • 仍然无法理解 ASP.NET 事件。他们有什么意义?

    也许我很慢 但我只是不明白为什么你会使用不是从实际操作 例如单击 派生的事件 当您只需调用方法时 为什么要经历创建委托和事件的繁琐工作呢 看起来 当您创建一个事件时 您所做的只是创建一种方法 让调用者通过一些复杂的过程来调用一个简单的方法
  • 如何将 ASP.NET 下拉列表 DataTextField 属性绑定到嵌套属性

    我想绑定DataTextFieldASP NET 下拉控件的属性到作为初始数据源的属性的对象的属性 我将如何完成这项特定任务 下拉数据源数据架构 public class A public string ID get set public
  • ajax请求后页面刷新

    好吧 我有一个简单的表格 仅包含一个text field 当我们点击提交时 写入文本字段的数据将存储在数据库中 通过ajax存储 ajax 工作正常并且数据已提交 但是页面会自动刷新并且 URL 包含输入字段的内容 我的表格
  • 我应该使用多个数据库吗?

    我即将使用 Ruby on Rails 创建一个应用程序 我想使用多个数据库 基本上是一个会计应用程序 每个用户都有多个公司 我想为每个公司创建一个数据库 我找到了这个帖子http programmerassist com article