这是第二部分,主要是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
- 浏览 1143
- 评论(0)
- 论坛回复 / 浏览 (0 / 1859)
- 查看更多
相关推荐
建立一个网站其实不是很多人想象的那么复杂,很多人在几天之内就能建立自己的个人网站...本文将通过简明扼要的方式告诉你如何建立一个自己的网站。
编制一段程序,实现进程的管道通信,使用系统调用pipe()建立一个管道文件;两个子进程P1和P2 分别向管道各写一句话: Child1 is sending a message! Child2 is sending a message! 而父进程则从管道中读出来自于...
题目:建立一个名为Student的类,该类有以下几个私有成员变量:学生姓名、学号、性别、年龄。还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个...
建立一个无序链表,每个...要求除主函数外编写4个函数:一个函数完成建立链表的工作,第二个函数完成输出链表上各结点值,第三个函数求出总分最高和最低的同学并输出,第四个函数完成释放链表结点占用的动态存储空间。
RubyonRails九日学习计划(含相关软件及书籍)时间 内容 目的 第一天 学习oracle 基本工具掌握 plsql ,sql语言,范式,索引,数据库安全,数据备份,导入导出。 熟练掌握SQL语言 第二天 1. ruby 语言历史和...
本项目“Ruby-在一个简单的UI中管理您的RubyOnRails模型关系和迁移”旨在提供一个直观的用户界面,以便开发者能够更加方便地管理和操作Rails应用中的数据模型、关系和数据库迁移。 在Rails中,数据模型(Model)...
1、输入学生信息,建立链表; 2、输出链表中全部学生信息; 3、根据姓名检索学生信息; 4、打印成绩不及格学生名单。
使用系统调用pipe()建立一条管道线;两个子进程P1和P2分别向管道各写一句话: Message from Child l! Message from Child 2! 父进程从管道中读出来自于两个子进程的信息,显示在屏幕上。 要求父进程先接收子...
SIMULINK是一个用来对动态系统进行建模、仿真和分析的软件包。它可以快速建立控制系统的模型,进行仿真和调试。在本实验中,我们将使用SIMULINK建立典型环节的仿真模型,并观察其单位阶跃响应波形。 实验步骤: 1....
Java 第二阶段建立编程思想 【枚举和注解】---- 代码 Java 第二阶段建立编程思想 【枚举和注解】---- 代码 Java 第二阶段建立编程思想 【枚举和注解】---- 代码 Java 第二阶段建立编程思想 【枚举和注解】---- 代码 ...
设计一个简单的文件系统,用文件模拟磁盘,用数组模拟缓冲区,要求: (1) 支持多级目录结构,支持文件的绝对读路径; (2) 文件的逻辑结构采用流式结构,物理结构采用链接结构中的显式链接方式; (3) 采用文件...
二级倒立摆系统是一个典型的非线性、多变量和绝对不稳定系统,其动态特性是控制理论研究中的一个重要课题。在二级倒立摆系统中,通常包含一个小车和两根通过铰链连接的摆杆,这种摆动系统能够模拟倒立的物理现象。在...
内容概要:本文针对燃烧优化参数调整实验复杂和耗时的特点,提出了一种基于工况优选的燃烧优化典型样本库的建立方法。通过移动最小二乘法(MLS)对电厂历史数据进行拟合,筛选出典型工况,并利用三次样条插值法建立...
例题三则涉及到资源分配问题,这是一次函数应用的另一个重要方面。通过建立一次函数模型来最大化农作物的预计总产值,学生可以学会如何运用数学工具来优化资源分配,以实现效益最大化。这类问题的解决有助于学生认识...
LTSpice 是一种广泛应用的电子电路仿真软件,在设计和分析 MOS 电路时,需要建立 MOS 模型。MOS 模型是指用于描述 MOSFET 的电气特性的数学模型。根据模型的复杂度和精度,可以将其分为一级、二级、三级模型等。 一...
labview解一元二次方程,简单易懂,也可以利用此做成子VI
所谓典型局域网就是指由一台具备三层交换功能的核心交换机接几台分支交换机。文中给出了三台分支交换机与核心交换机相连,并建立VLAN的实例。
Windows Server 2012 R2 提供了一种简单的方式来建立 FTP 服务器,以便用户可以远程访问和传输文件。 标题解释 Windows Server 2012 R2 服务器建立 FTP 访问,及无法与服务器建立连接相关问题解决 描述解释 该文档...
论文的名称是:《UG二次开发技术在企业标准件数据库建立中的应用》