这是第二部分,主要是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
- 浏览 1122
- 评论(0)
- 论坛回复 / 浏览 (0 / 1846)
- 查看更多
相关推荐
编制一段程序,实现进程的管道通信,使用系统调用pipe()建立一个管道文件;两个子进程P1和P2 分别向管道各写一句话: Child1 is sending a message! Child2 is sending a message! 而父进程则从管道中读出来自于...
题目:建立一个名为Student的类,该类有以下几个私有成员变量:学生姓名、学号、性别、年龄。还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个...
二次曲面拟合是一种数学方法,它用一个二次函数来近似一组数据点。在三维空间中,二次曲面可以表示为: \[ z = ax^2 + by^2 + cxy + dx + ey + f \] 其中,\( (x, y) \) 是平面上的坐标,\( z \) 是对应的高程值,...
hypermesh作为一个功能强大的网格划分软件深受CFD工作者的喜爱,本教程手把手教学如何建立二维模型,并进行网格划分,完成输出导入Fluent软件。教学详细,一看就会
本项目“Ruby-在一个简单的UI中管理您的RubyOnRails模型关系和迁移”旨在提供一个直观的用户界面,以便开发者能够更加方便地管理和操作Rails应用中的数据模型、关系和数据库迁移。 在Rails中,数据模型(Model)...
首先,我们需要准备一个基础环境,通常选择一个已有的Linux发行版作为起点,比如Ubuntu或者Fedora。这是因为它们提供了丰富的软件包和方便的开发工具。你可以通过下载ISO镜像,然后使用虚拟机软件(如VirtualBox或...
使用系统调用pipe()建立一条管道线;两个子进程P1和P2分别向管道各写一句话: Message from Child l! Message from Child 2! 父进程从管道中读出来自于两个子进程的信息,显示在屏幕上。 要求父进程先接收子...
Java 第二阶段建立编程思想 【异常】---- 代码 Java 第二阶段建立编程思想 【异常】---- 代码 Java 第二阶段建立编程思想 【异常】---- 代码 Java 第二阶段建立编程思想 【异常】---- 代码 Java 第二阶段建立编程...
又如,多边形的对角线总数 d 与边数 n 的关系 d=n(n-3)/2,虽然看起来不是标准的二次函数形式,但它可以通过展开化简得到一个二次函数关系。 在学习过程中,学生需要掌握如何识别和分类不同的函数类型,如一次函数...
设计一个简单的文件系统,用文件模拟磁盘,用数组模拟缓冲区,要求: (1) 支持多级目录结构,支持文件的绝对读路径; (2) 文件的逻辑结构采用流式结构,物理结构采用链接结构中的显式链接方式; (3) 采用文件...
二级倒立摆系统是一个典型的非线性、多变量和绝对不稳定系统,其动态特性是控制理论研究中的一个重要课题。在二级倒立摆系统中,通常包含一个小车和两根通过铰链连接的摆杆,这种摆动系统能够模拟倒立的物理现象。在...
根据每一个一元线性回归模型的检验结果,选择其中一个模型为基本模型,逐步加入其它解释变量建立二元线性回归模型;建立最终确定的被解释变量Y与解释变量Xi的二元线性回归模型;以建立的多元线性回归模型为基础,...
内容概要:本文针对燃烧优化参数调整实验复杂和耗时的特点,提出了一种基于工况优选的燃烧优化典型样本库的建立方法。通过移动最小二乘法(MLS)对电厂历史数据进行拟合,筛选出典型工况,并利用三次样条插值法建立...
例题三则涉及到资源分配问题,这是一次函数应用的另一个重要方面。通过建立一次函数模型来最大化农作物的预计总产值,学生可以学会如何运用数学工具来优化资源分配,以实现效益最大化。这类问题的解决有助于学生认识...
LTSpice 是一种广泛应用的电子电路仿真软件,在设计和分析 MOS 电路时,需要建立 MOS 模型。MOS 模型是指用于描述 MOSFET 的电气特性的数学模型。根据模型的复杂度和精度,可以将其分为一级、二级、三级模型等。 一...
LFS项目允许用户从源代码开始,逐步编译和安装构成一个完整Linux系统的各个组件,这既是一个学习过程,也是一个挑战。 一、Linux From Scratch(LFS)介绍 LFS是一个开源项目,它提供了一套详细的步骤和指导,让...
在本文中,我们将深入探讨如何使用MATLAB的Simulink工具来建立一个基于PID控制器的二连杆机械手臂模型,并实现对其角度的精确控制。首先,我们要理解二连杆机械手臂的基本构造和运动原理,然后我们会涉及电机的传递...
在给定的任务中,首先从文件 `Data.txt` 中读取编号和权重的数据,存储到一个二维数组 `data` 中。接着,用户输入要查找的权重值,使用除留余数法作为哈希函数,即取权重值对哈希表的大小取模,得到初始哈希地址。...
所谓典型局域网就是指由一台具备三层交换功能的核心交换机接几台分支交换机。文中给出了三台分支交换机与核心交换机相连,并建立VLAN的实例。
论文的名称是:《UG二次开发技术在企业标准件数据库建立中的应用》