首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >升级一个红宝石,activerecord,mysql应用程序

升级一个红宝石,activerecord,mysql应用程序
EN

Stack Overflow用户
提问于 2013-01-08 20:59:42
回答 2查看 139关注 0票数 1

我有个应用程序..。

该应用程序为金融产品做了一个市场比较--对于给定的报价请求,它会联系其他几个网站获取它们的报价。然后,它给用户结果-几个引号他们的细节。

为了管理这些请求,它们被保存到MySQL,然后我的应用程序启动,取起挂起的引号,并将其放入线程(都是相同的Linux框)来处理每个站点查找。

我使用JRuby,因为我有与线程/db相关的问题。使用Java线程池来控制线程数。使用当前的硬件/VPS,它可以处理大约200个线程。很多限制似乎都与每个线程抓取自己的MySQL连接有关--获取引用的细节并保存结果。我们想要处理更多的并发线程,因此寻找扩展的方法。

想知道该走哪条路..。

  1. 更大的硬件。
  2. 更多的机器和使用某种排队机制(带有优先级)来在机器上共享负载--因此线程不访问db,所有细节/响应都通过队列进行处理--因此DB命中的次数较少,但也许我只是将问题推到队列中。考虑在队列中使用类似于MongoDB的东西,但可以接受建议--这是易于使用的Ruby :)
  3. 某种远程/RPC机制,如dRb --从理论上讲,这似乎是一个不错的选择,但没有对此做任何事情,也不知道它会使事情变得多么复杂。
  4. 别的什么.?

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

所以,任何关于该走哪条路的想法.

干杯,克里斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-08 21:08:14

我处理此类问题的通常方法是非常密切地关注您正在进行的数据库查询,并对它们进行积极的调优。只检索所需的内容,跳过未显式使用的列,并非常小心地加载不需要的全部内容。

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

此外,考虑一下缓存:最快的数据库调用是从未进行过的调用。要想利用Memcached这样的工具来保存一个比较耗时的记录检索的结果并不难,如果仔细做,甚至很容易使其失效和过期,只要您通过几种方法引导您的更新。

对于调度工作人员,可以在Redis中实现一个简单的先入先出队列,以从MySQL本身卸载大量处理开销。这通常是非常简单的添加,如果您遵循一个例子。

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

如果您已经用尽了这些选项,那么现在是需要更多前端服务器和更多数据库容量的时候了,但只有到那时。

票数 2
EN

Stack Overflow用户

发布于 2013-01-08 21:15:39

对你来说,查询是最容易实现的。使用像这样的东西:http://beanstalkd.github.com/beaneater/

基本上,您可以使用async.来添加您的方法,这将使它们进入队列并执行它们。它们的队列和工作人员可以是同一台服务器,也可以是不同的服务器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14223909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档