程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 建立一個典型的Ruby On Rails網站(二)

建立一個典型的Ruby On Rails網站(二)

編輯:關於JAVA

這是第二部分,主要是Mysql數據庫的分布式設計。我建立環境的時候,基本上沒有把數據庫分開。為用到的時候,做准備吧。

主從結構的數據庫設計

www.eol.org 項目本身有主從數據庫和讀寫分開的數據庫設計。

(Master/Slave)和Rails核心數據庫與應用核心數據庫分離。主要依靠以下插件實現:

use_db   : 主要功能是將不同的models 分布到不同的數據庫。詳細說明見下:(http://rails.elctech.com/blog/using-and-testing-rails-with-multiple-databases)

masochism : 主要用於ActiveRecord時,將讀寫操作分開詳細說明參考如下網址(http://www.planetrubyonrails.org/tags/view/masochism)

分布式機構的Mysql數據庫設計

在本程序中,分布式數據庫的實現,主要通過創建連接到不同數據庫的Abstract Class Models, 其他的Models再通過繼承虛類的方式,而連接不同的數據庫。這樣就實現了,將Models分布到不同的數據庫。

在本項目中,有兩個Abstract Class Model分別對應應用數據庫,和日志庫。這兩個Abstract Class Model分別為:

Ruby代碼

- SpeciesSchemaModel
- LoggingModel

和它們對應的數據庫可以從database.yml的定義中找到,分別是

Java代碼

- environment_data (e.g. development_data)
- environment_logging (e.g. development_logging)

讀寫分開的分布數據庫機制

讀寫分開的數據庫機制是依靠masochism plugin建立兩個數據庫完成的。這兩個數控庫也可以從config/database.yml中看到描述

Ruby代碼

- master_database (master database 存儲核心的Rails數據)
- master_data_database (master database 存儲應用本書的數據)

另外,為了區分數據的訪問,分別設計兩個不同的Abstract class讀取以上兩個不同的Master數據庫它們各自擁有直接的Sql查詢權限。

Ruby代碼

- MasterDatabase   (for the core rails database)
- SpeciesSchemaWriter  (for the species data database)

對於日志數據,是沒有必要讀寫分開的。所以,將保留簡單的單獨數據庫結構。

通過ActiveRecord將讀寫操作分開,需要在以下文件進行設置

environment.rb (例如: config/environments/production.rb):

Ruby代碼

  config.after_initialize do 
    ActiveReload::ConnectionProxy.setup!  
    ActiveReload::ConnectionProxy.setup_for SpeciesSchemaWriter, SpeciesSchemaModel          
  end

這裡應該特別指出的是:要想使用這個分布設置,一定要打開緩存。

Ruby代碼

  config.cache_classes = true

值得一提是因為,這一設置,在production模式下是默認打開的,但在development模式下並沒有打開。如果,要想在development模式下測試這個功能,就需要手動打開這個設置。

這樣通過上面的設置,沒有寫操作的SELECT查詢語句將會在SLAVE的數據庫執行,類似如下的寫操作,將會在Master庫執行:

Ruby代碼

  SpeciesSchemaModel.connection.execute("DELETE FROM data_objects WHERE id in (#{data_objects})")

如果,你是在development模式下運行,那麼你沒有必要擔心,分布數據庫的作用。實際上在development模式下,master_database master_data_database實際是同一個development庫

,而且即使它們分開的建立在數據庫中,也不會造成影響。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved