這是第二部分,主要是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)