gpt4 book ai didi

mysql - RoR/MySQL : How many Ruby instances can work on 1 MySQL database (in parallel)?

转载 作者:行者123 更新时间:2023-11-29 03:44:04 24 4
gpt4 key购买 nike

我在从 Ruby on Rails 控制台 (IRB) 启动的 Controller 中有一个脚本。

此脚本不断创建-读取-更新(无删除)MySQL 数据库,从 Interwebs 获取数据。

问题是需要很长时间才能将所有需要的数据放入数据库。所以我想知道简单地打开多个 Rails 控制台并并行多次启动该脚本是否是个好主意。

-> 几个 Ruby 实例可以工作 1 个数据库。

这是个问题吗?这会在数据库中产生任何写入冲突(创建/更新)吗?如果是这样,为了避免此类冲突,我必须做些什么吗?

如果这不是问题:我可以并行地将多少个 Ruby 实例“释放”到数据库中?

最佳答案

您绝对可以针对单个数据库同时运行多个控制台。该限制是数据库允许的打开连接数。在 Mysql 5.1 中,默认值为 100,而在 5.5 中为 151。在其他事情成为瓶颈之前,您不太可能耗尽连接。

让多个进程同时运行可能行得通,但也可能行不通。对此的完整分析相当复杂。您可以做几件事来确保它能与多个并发客户端一起正常工作。首先,如果您将每个更改包装在一个数据库事务中,它将处理您需要的大部分内容:

transaction do
# all your code to create / modify a single item goes here
end

确保您的表使用的是 InnoDB 格式而不是不支持事务的 MyISAM。

此外,正如 mu too short 指出的那样,将所有可以直接放入数据库的验证约束。因此,如果您有唯一性约束或外键关系,请手动将它们添加到您的架构中,因为默认情况下 Rails 不会这样做。比较不同模型对象的复杂验证(除了 belongs_to 中的 FK 关系)可能需要数据库触发器验证——但愿您不需要它。但是,如果您在数据库中本地获取所有验证,那么一切都应该有效。

关于mysql - RoR/MySQL : How many Ruby instances can work on 1 MySQL database (in parallel)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9070715/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com