这是第二部分,主要是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分别为:
- SpeciesSchemaModel
- LoggingModel
和它们对应的数据库可以从database.yml的定义中找到,分别是
- environment_data (e.g. development_data)
- environment_logging (e.g. development_logging)
读写分开的分布数据库机制
读写分开的数据库机制是依靠masochism plugin建立两个数据库完成的。这两个数控库也可以从config/database.yml中看到描述
- master_database (master database 存储核心的Rails数据)
- master_data_database (master database 存储应用本书的数据)
另外,为了区分数据的访问,分别设计两个不同的Abstract class读取以上两个不同的Master数据库它们各自拥有直接的Sql查询权限。
- MasterDatabase (for the core rails database)
- SpeciesSchemaWriter (for the species data database)
对于日志数据,是没有必要读写分开的。所以,将保留简单的单独数据库结构。
通过ActiveRecord将读写操作分开,需要在以下文件进行设置
environment.rb (例如: config/environments/production.rb):
config.after_initialize do
ActiveReload::ConnectionProxy.setup!
ActiveReload::ConnectionProxy.setup_for SpeciesSchemaWriter, SpeciesSchemaModel
end
这里应该特别指出的是:要想使用这个分布设置,一定要打开缓存。
config.cache_classes = true
值得一提是因为,这一设置,在production模式下是默认打开的,但在development模式下并没有打开。如果,要想在development模式下测试这个功能,就需要手动打开这个设置。
这样通过上面的设置,没有写操作的SELECT查询语句将会在SLAVE的数据库执行,类似如下的写操作,将会在Master库执行:
SpeciesSchemaModel.connection.execute("DELETE FROM data_objects WHERE id in (#{data_objects})")
如果,你是在development模式下运行,那么你没有必要担心,分布数据库的作用。实际上在development模式下,master_database master_data_database实际是同一个development库
,而且即使它们分开的建立在数据库中,也不会造成影响。
分享到:
- 2009-03-10 00:03
- 浏览 1081
- 评论(0)
- 论坛回复 / 浏览 (0 / 1795)
- 查看更多
相关推荐
1. 编写一个 Java 程序, 在程序中建立一个窗口, 有两个文本框和一个按钮, 单击按钮, 能把左边文本框中的内容复制到右边文本框中.
4.深度解密四:零基础3小时内学会如何自己独立建立一个网站.docx4.深度解密四:零基础3小时内学会如何自己独立建立一个网站.docx4.深度解密四:零基础3小时内学会如何自己独立建立一个网站.docx4.深度解密四:零基础...
建立一个网站其实不是很多人想象的那么复杂,很多人在几天之内就能建立自己的个人网站...本文将通过简明扼要的方式告诉你如何建立一个自己的网站。
编制一段程序,实现进程的管道通信,使用系统调用pipe()建立一个管道文件;两个子进程P1和P2 分别向管道各写一句话: Child1 is sending a message! Child2 is sending a message! 而父进程则从管道中读出来自于...
题目:建立一个名为Student的类,该类有以下几个私有成员变量:学生姓名、学号、性别、年龄。还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个...
建立一个无序链表,每个...要求除主函数外编写4个函数:一个函数完成建立链表的工作,第二个函数完成输出链表上各结点值,第三个函数求出总分最高和最低的同学并输出,第四个函数完成释放链表结点占用的动态存储空间。
U_G_二次开发与加工自动化 UG/Grip技术在诱导轮三维设计中的运用...二次开发UG中标准件库的建立 二次开发中成型特征的相对定位 基于U_G_的直齿圆柱齿轮绘制研究 基于UG_OPEN_API_的齿轮模块开发 利用Java二次开发UG_NX
hypermesh作为一个功能强大的网格划分软件深受CFD工作者的喜爱,本教程手把手教学如何建立二维模型,并进行网格划分,完成输出导入Fluent软件。教学详细,一看就会
使用C++的类建立一个简单的卖玩具的程序。类内必须具有玩具单价,售出数量以及每种玩具售出的总金额等数据, 为该类建立一些必要的函数,并在主程序中使用建立若干个带有单价和售出数量的对象,显示每种玩具售出...
Windows Azure使用入门 第二课:建立自己的网站.pdf
建立一个基于对话框的MFC应用程序.doc 介绍一个简单的框架程序,入门练习
RubyonRails九日学习计划(含相关软件及书籍)时间 内容 目的 第一天 学习oracle 基本工具掌握 plsql ,sql语言,范式,索引,数据库安全,数据备份,导入导出。 熟练掌握SQL语言 第二天 1. ruby 语言历史和...
如何建立一个网站,建设网站必备条件.pdf
1、输入学生信息,建立链表; 2、输出链表中全部学生信息; 3、根据姓名检索学生信息; 4、打印成绩不及格学生名单。
手把手教你如何建立自己的Linux系统,自己copy下来的做成pdf的,要了解linux一定要跟着做一次
所谓典型局域网就是指由一台具备三层交换功能的核心交换机接几台分支交换机。本文将为大家介绍以太网络建立多个VLAN典型案例。
//编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 //例如如下的先序遍历字符串: //ABC##DE#G##F### //其中“#”表示的是空格,空格字符代表空树。建立起此二叉树...
使用系统调用pipe()建立一条管道线;两个子进程P1和P2分别向管道各写一句话: Message from Child l! Message from Child 2! 父进程从管道中读出来自于两个子进程的信息,显示在屏幕上。 要求父进程先接收子...
归并排序(Merge sort)(台灣譯作:合併排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
通过二次曲面拟合的方式建立模型,实现大地高,正常高,高程异常值之间的相互转换,实现拟合模型成功建立。