这是第二部分,主要是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
- 浏览 1118
- 评论(0)
- 论坛回复 / 浏览 (0 / 1839)
- 查看更多
相关推荐
建立一个网站其实不是很多人想象的那么复杂,很多人在几天之内就能建立自己的个人网站...本文将通过简明扼要的方式告诉你如何建立一个自己的网站。
编制一段程序,实现进程的管道通信,使用系统调用pipe()建立一个管道文件;两个子进程P1和P2 分别向管道各写一句话: Child1 is sending a message! Child2 is sending a message! 而父进程则从管道中读出来自于...
题目:建立一个名为Student的类,该类有以下几个私有成员变量:学生姓名、学号、性别、年龄。还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个...
U_G_二次开发与加工自动化 UG/Grip技术在诱导轮三维设计中的运用...二次开发UG中标准件库的建立 二次开发中成型特征的相对定位 基于U_G_的直齿圆柱齿轮绘制研究 基于UG_OPEN_API_的齿轮模块开发 利用Java二次开发UG_NX
hypermesh作为一个功能强大的网格划分软件深受CFD工作者的喜爱,本教程手把手教学如何建立二维模型,并进行网格划分,完成输出导入Fluent软件。教学详细,一看就会
本项目“Ruby-在一个简单的UI中管理您的RubyOnRails模型关系和迁移”旨在提供一个直观的用户界面,以便开发者能够更加方便地管理和操作Rails应用中的数据模型、关系和数据库迁移。 在Rails中,数据模型(Model)...
使用系统调用pipe()建立一条管道线;两个子进程P1和P2分别向管道各写一句话: Message from Child l! Message from Child 2! 父进程从管道中读出来自于两个子进程的信息,显示在屏幕上。 要求父进程先接收子...
网站主题应该是您自己的特色,或者可以建立一个私人门户网站,将平时自己经常去的网站做一个较为综合的连结。 选择免费主页空间 选择免费的主页空间是建立网站的重要步骤。在选择主页空间时,需要考虑主机的速度、...
"使用Anylogic建立一个银行模型" 在本教程中,我们将使用Anylogic建立一个简单的银行排队模型,旨在模拟银行内部的业务流程。我们将使用Anylogic的流程建模库和三维动画功能来建立模型,并使用triangular分布函数来...
设计一个简单的文件系统,用文件模拟磁盘,用数组模拟缓冲区,要求: (1) 支持多级目录结构,支持文件的绝对读路径; (2) 文件的逻辑结构采用流式结构,物理结构采用链接结构中的显式链接方式; (3) 采用文件...
二级倒立摆系统是一个典型的非线性、多变量和绝对不稳定系统,其动态特性是控制理论研究中的一个重要课题。在二级倒立摆系统中,通常包含一个小车和两根通过铰链连接的摆杆,这种摆动系统能够模拟倒立的物理现象。在...
LTSpice 是一种广泛应用的电子电路仿真软件,在设计和分析 MOS 电路时,需要建立 MOS 模型。MOS 模型是指用于描述 MOSFET 的电气特性的数学模型。根据模型的复杂度和精度,可以将其分为一级、二级、三级模型等。 一...
在本文中,我们将深入探讨如何使用MATLAB的Simulink工具来建立一个基于PID控制器的二连杆机械手臂模型,并实现对其角度的精确控制。首先,我们要理解二连杆机械手臂的基本构造和运动原理,然后我们会涉及电机的传递...
labview解一元二次方程,简单易懂,也可以利用此做成子VI
UG(Unigraphics Solutions)是一款强大的计算机辅助设计、制造、工程(CAD/CAM/CAE)软件,广泛应用于航空、汽车、机械等制造业。UG的二次开发是指利用其提供的编程接口(API)和开发工具,如UG/OPEN、Open NX等,...
在这个典型的网站建设案例中,我们有8个不同的源码示例,这将帮助我们深入理解如何在实际项目中应用ASP和SQL Server。 1. **ASP基础概念** ASP是Web开发中的一个核心技术,它允许开发者在服务器端编写脚本,生成...
教师档案管理系统是一个典型的高校档案管理系统,其开发过程主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面。对于前者要求建立起数据一致性和完整性强、数据安全性好的数据库。而对于后者则要求其...
Windows Server 2012 R2 提供了一种简单的方式来建立 FTP 服务器,以便用户可以远程访问和传输文件。 标题解释 Windows Server 2012 R2 服务器建立 FTP 访问,及无法与服务器建立连接相关问题解决 描述解释 该文档...
LLsMP系列教程之二:添加站点建立网站方法.docx