如何在运行多台服务器的生产环境中更快地进行 ActiveRecord 查询?

用户5736915

我怎样才能重写 ActiveRecord 查询来解决这个问题?我是一名 Python 程序员并使用 sqlalchemy,所以如果可以从 Python 的角度解释这一点,那就太好了。我真的只需要知道如何解决这个问题。

我知道这个问题可能与在每台服务器上打开的连接有关,因此与单服务器登台环境相比,在生产环境中运行速度较慢。但我不知道如何解决这个问题。我习惯用 python 编程,在那里我使用 sqlalchemy,它已经针对这种分布式系统进行了优化。

class Board < ActiveRecord::Base
    def messages
        message_ids = Message.where("board_id = ?", self.id).map { |c| c.id }
        message_ids.map { |message_id| Message.find_by_id(message_id) }
    end
end

ActiveRecord 查询经过优化,可在多服务器生产环境和单服务器登台环境中运行。

杰-阿尔波利达里奥

应用程序/模型/board.rb

class Board < ActiveRecord::Base
  has_many :messages
end

以上将允许您执行以下操作:

board = Board.first
board.messages
# => returns a `ActiveRecord::Associations::CollectionProxy` object
#    for beginners, simply treat `ActiveRecord::Associations::CollectionProxy` as
#    if that's an Array object. So you can still do something like

board.messages.first
# => #<Message id: 123, ...>
  • 现在您还需要在下面添加(但不需要回答您的问题)

应用程序/模型/message.rb

class Message < ActiveRecord::Base
  belongs_to :board
end

...这将允许您执行以下操作:

message = Message.first
message.board
# => #<Board id: 456, ...>

在此处查看Rails 协会文档

尤其要注意“隐含约定”,例如隐含foreign_keyclass_name

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章