gpt4 book ai didi

mysql - 扩展 ruby​​、activerecord、mysql 应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:57:44 24 4
gpt4 key购买 nike

我有一个应用程序...

该应用程序对金融产品进行市场比较 - 对于给定的报价请求,它会联系其他几个网站以获取报价。然后它会向用户提供结果 - 对他们的详细信息的一些引用。

为了管理这些请求,它们被保存到 MySQL,然后我的应用程序启动,挑选待处理的报价并将它们分配给线程(所有相同的 Linux 机器)以处理每个站点查找。

我正在使用 JRuby,因为我遇到了与线程/数据库相关的问题。使用 Java 线程池来控制线程数。使用当前的硬件/VPS - 它可以处理大约 200 个线程。许多限制似乎与每个线程获取自己的 MySQL 连接有关——获取报价详细信息并保存结果。我们希望处理更多的并发线程,因此想方设法扩大规模。

想知道要走哪条路......

  1. 更大的硬件...
  2. 更多机器并使用某种排队在机器之间共享负载的机制(具有优先级)-所以线程不接触数据库,所有细节/响应都通过队列 - 所以数据库命中率较低,但也许我只是在插入问题进入队列。想用类似的东西用于队列的 MongoDB,但对建议持开放态度 - 一些容易与 Ruby 一起使用 :)
  3. 某种远程/RPC 机制,例如 dRb -理论上这似乎是一个不错的选择,但没有做任何事情有了这个还不知道它会使事情变得多么复杂。
  4. 某事否则……?

来自此链接 Reasons for NOT scaling-up vs. -out? - 看起来这个问题适合运行更多的机器来解决它。

那么,关于要走哪条路的任何想法......

干杯,克里斯

最佳答案

对于此类问题,我通常采取的方法是密切关注您正在进行的数据库查询并积极调整它们。 检索您需要的内容,跳过未明确使用的列,并且在急切加载您不需要的全部内容时要非常小心。

您经常会发现,通过添加索引或在战略上对数据库中的某些属性进行非规范化以避免丑陋、耗时的 JOIN 操作,您可以获得显着的速度提升。

此外,请考虑缓存:最快的数据库调用是从未进行过的调用。利用 Memcached 之类的东西来保存中等耗时的记录检索结果并不难,如果小心操作,它甚至很容易失效和过期,前提是您通过几种方法引导更新。

对于调度 worker ,可以在 Redis 中实现一个简单的先进先出队列,以减轻 MySQL 本身的大量处理开销。如果您按照示例进行操作,这通常很容易添加。

像 Memcached 这样的缓存可以处理非常高的流量,因此只要有可能,就缓存它以避免每次都访问数据库。

如果您已经用尽了这些选项,那么是时候使用更多的前端服务器甚至更多的数据库容量了,但仅此而已。

关于mysql - 扩展 ruby​​、activerecord、mysql 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14223909/

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