【问题标题】:What is the most performant way to get data of one rails application by another rails application?通过另一个rails应用程序获取一个rails应用程序数据的最高效方法是什么?
【发布时间】:2023-03-27 12:36:01
【问题描述】:

我有两个 Rails 应用程序(现在都在 Rails 3.1.1 上),它们运行良好。但是,我在两者之间存在依赖关系。应用程序A 通过链接使用应用程序B 的数据。这些链接是自动创建的,但必须通过查找应用程序B 的数据来计算它们。我正在使用 Ruby 1.9.2 和 Thin 作为 Web 服务器在 Windows 7 上工作,这不会改变:-(

我尝试了以下方法:

  • 只使用一个 RESTful 资源,因此定义了一个控制器,称为它的操作(get_xml_obj,其中包含一些参数),从 XML 中读取所需的值。有效,但每次调用大约需要 0.5 到 1 秒。
  • 将其替换为 ActiveResource#find,效果也不错,但性能与之前的解决方案相同。
  • 我已经安装了 nginx 并对其进行了配置,使连接保持活动状态,因此连接处理应该更快。但是从A 调用B 时发现没有任何区别。

当我比较花费的时间时,这些是典型的例子(这里在一个网页中有 4 个参考):

应用 A:

Started GET "/tasks/search_task/1803" for 127.0.0.1 at 2011-11-02 14:11:04 +0100

  Processing by TasksController#search_task as HTML
  Parameters: {"id"=>"1803"}
Rendered tasks/_tooltip.html.haml (4529.5ms)
Completed 200 OK in 4532ms (Views: 4527.5ms | ActiveRecord: 2.0ms)
cache: [GET /tasks/search_task/1865] miss

应用 B:

cache: [GET /service/get_xml_obj?key=notice&value=rails] miss

Started GET "/service/get_xml_obj?key=notice&value=rails" for 127.0.0.1 at 2011-
11-02 14:11:05 +0100
  Processing by ServiceController#get_xml_obj as */*
  Parameters: {"key"=>"notice", "value"=>"rails"}
Completed 200 OK in 6ms (Views: 3.0ms | ActiveRecord: 1.0ms)

和其他 3 个具有相似长度(

那么我可以做些什么来调整检索(无需直接访问数据库)?你知道如何测量和调整 Web 服务器和中间件的任何好的文档吗?这些只是个人应用程序,因此无法将它们部署在像样的服务器上。我对检索到的信息使用缓存,所以随着时间的推移它会变得更好,但是等待 1 秒太长了。并且我要呈现的页面中可能有超过 1 或 2 个链接。

【问题讨论】:

  • 不能直接进入数据库吗?
  • 也许我可以(将是下一次尝试获得更好的性能)。但是它也有一些缺点:2个数据库连接,很多模型对象的重复。当然,我希望看到有可用的高性能 Rails 解决方案。
  • 将共享模型放入插件/gem。

标签: ruby-on-rails ruby-on-rails-3 performance ruby-on-rails-3.1


【解决方案1】:

好吧,我终于放弃了,实现了以下:

  • 在应用程序A 中将文件b.rb 添加到我的models 目录。
  • 包括所有原始模型,其中基本模型(使用 sti)的定义如下:

    class Notice < ActiveRecord::Base
      self.establish_connection(
        :adapter => "sqlite3",
        :database  => "../b/db/dev.db"
      )
    end
    ...
    
  • 我现在可以问:Notice.where(:key =&gt; 'rails'),这会产生一个真正的 Rails 模型对象。

整个事情在20分钟左右就实现了,现在从应用程序AB包含5个链接没有任何区别。

在某个时间点,我想知道这里使用 RESTful 资源的缓慢部分是什么...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多