首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

打造典型 Ruby on Rails 網站(二):MySQL 分散式架構與讀寫分離

     編輯:Java 相關知識

雙層分散式資料庫架構

EOL.org 採用兩大分離機制:

  1. 主從複寫:masochism 插件實現讀寫分離
  2. 2. 核心/應用/日誌三庫分離:use_db 插件將 Model 分派至不同資料庫

Abstract Model 實現庫分派

# 兩個抽象基類
class SpeciesSchemaModel < ActiveRecord::Base
  self.abstract_class = true
  # 連接 environment_data (如 development_data)
end

class LoggingModel < ActiveRecord::Base
  self.abstract_class = true
  # 連接 environment_logging (如 development_logging)
end

# 具體 Model 繼承對應基類
class Taxon < SpeciesSchemaModel; end
class ActivityLog < LoggingModel; end

讀寫分離:masochism 實作細節

雙 Master 架構

# config/database.yml
master_database:       # 核心 Rails 資料
master_data_database:  # 業務資料

對應 Abstract Class

class MasterDatabase < ActiveRecord::Base
  self.abstract_class = true
  # 直連 master_database
end

class SpeciesSchemaWriter < ActiveRecord::Base
  self.abstract_class = true
  # 直連 master_data_database
end

啟用讀寫分離

# config/environments/production.rb
config.after_initialize do
  ActiveReload::ConnectionProxy.setup!
  ActiveReload::ConnectionProxy.setup_for SpeciesSchemaWriter, SpeciesSchemaModel
end

# 必須開啟類別快取
config.cache_classes = true

運作原理

  • SELECT 無寫操作 → 自動導向 Slave
  • 含寫操作(INSERT/UPDATE/DELETE、execute()) → 強制走 Master
  • 開發模式下 master_database = master_data_database = development,無影響

日誌庫保持單一結構

日誌屬順寫多讀少,無需讀寫分離,維持簡單單庫架構。

關鍵提醒

生產環境預設開啟 cache_classes,開發環境若要測試讀寫分離必須手動設為 true,否則 masochism 不生效。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved