`
dogstar
  • 浏览: 273382 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

migration 资料 copy from internet

阅读更多
migration好像是rails 1.0出的功能,到底它是什么什么东东?用来干吗的?且听下面分解.

migration是一种分布环境下的数据库同步功能,它提供了: 1.独立于特定SQL的schema描述(当然是用ruby DSL啦).目前除了DB2外别的主流商用和开源数据库都被支持.(IBM真衰).显然,这种数据库独立的schema描述不可能包括数据库特定的细节, 所以在生产环境中需要再行调试优化. 2.schema和数据内容版本控制.我不是DBA啊(虽然曾经想过干这个),不知道有什么别的工具可以做数据库版本控制. 3.基于版本控制的分布式数据库同步.

先来说说基于ruby DSL的schema描述巴,打打基础. 如果rails项目中的数据库已经设计配置好了,可以执行rake db:schema:dump(这是Rails1.1的rake新语法,以前是rake db_schema_dump) 然后会生成db/schema.rb文件.打开一看,基本结构类似这样的:

 

ActiveRecord::Schema.define(:version => 5) do

  create_table "choices",:id => false, :force => true do |t|

    t.column "name", :string,, :limit => 30, :default => 'idiolt'

    t.column "content", :text, :limit => 100

    t.column "question_id", :integer, :null => false

  end

...

:version以后用了migrate才会看见,现在应该是空的,先不管这个. 如你所见这个表定义非常直观.需要说明的几个选项.

:force代表强制覆盖,默认false后面执行db:schema:load把表结构导回数据库的时候如果表已经存在由这个选项决定是否覆盖. :id参数默认为true,也就是按照rails约定每个表自动建立id字段作为主键.false的话意思是你自己在schema中建立主键. :limit和:default不用解释了吧. :null也没啥好解释的,false代表着SQL里的NOT NULL

你们已经看到db:schema:load了,恭喜,现在哪怕你不关心版本控制和分布式同步这些 "遥远的事". 你也可以从容在各种不同数据库直接移植表结构了.这可是DBA都头疼的事呢. 只要改一下database.yml的配置再执行rake db:schema:load就可以了.

现在来说说版本控制和同步.数据库毕竟不是代码,除了schema外还有数据的.像上面这样 load导进去的话会覆盖掉所有的数据. 所以我们需要找一个对数据影响最小的方法来更新数据库. 这部分需要做些手工操作了: script/generate migration XXX 建立一个migration版本,这个操作会在db/migration下产生nnn_XXX.rb文件. 同时 generate model的时候也会顺带产生nnn_create_XXX.rb文件. 内容类似:

 

class CreatePortfolios < ActiveRecord::Migration

  def self.up

    create_table :portfolios do |t|

      t.column :name, :string

    end

  end

  def self.down

    drop_table :portfolios

  end

end

up方法定义这个版本该做什么,down定义怎么回滚版本. 这里up里面创建了一个表, 方法和上面schema.rb里的一样. 除此外更常用的是对字段和索引的修改方法, 如 add_column/rename_column/change_column等,详见api文档. 除了对表结构的修改,还可以做任何对数据的修改. 比如导入数据常用的先删掉index,然后再导入, 最后再重建index.

定义好了migration后,我们可以执行rake db:migrate更新到最高的版本,或者指定回滚到某个版本: rake db:migrate version=n. migration自动根据当前版本判定该从哪回滚到哪. 在分布环境下,同步代码后只要执行一下就能保证数据库状态也是最新版本.

engine/plugin也能使用migration,比如login engine,在不破坏用户已有数据库内容的条件下添加新的所需数据内容.

另外需要注意的是每次使用migration后,db/schema.rb都会被刷新,所有手工对这个文件的修改都会丢失.

migration默认是不支持外键的,原因是一部分数据库如MySQL ISAM和SQLite不支持外键,同时外键也会给Rails的test fixture导入数据造成麻烦(这个好像有个很麻烦的解决办法)。不过还是有个插件提供了外键的导出(rake db:schema:dump)和导入(rake db:schema:load)(可惜migration中无法正常使用)。

分享到:
评论
1 楼 lgn21st 2007-04-09  
好文,如果能顺便介绍一下rake,哪可真是~~~

相关推荐

    AX58100_Migration_from_Beckhoff_ET1100_AppNote_v100.pdf

    在工业自动化和控制系统中,ETHERCAT作为一种高性能的工业以太网通信技术,被广泛应用于精确的运动控制领域。本文档提供了关于AX58100芯片如何从Beckhoff公司的ET1100 EtherCAT Slave Controller(ESC)迁移的信息,...

    ESF Database Migration Toolkit

    **ESF Database Migration Toolkit** 是一款专业的数据迁移工具,它具备强大的功能,支持在多种主流数据库之间进行数据迁移。这款工具能够帮助用户轻松地将数据从一个数据库系统迁移到另一个,比如MySQL、Oracle、...

    MySQL Migration Toolkit 数据库转化工具下载

    MySQL Migration Toolkit是一款强大的数据库迁移工具,它为用户提供了将数据从其他数据库系统迁移到MySQL的便利。这款2.3版本的工具集成了多种功能,旨在简化数据库迁移过程,确保数据的完整性和一致性。 1. **简介...

    IBM Migration Toolkit

    **IBM Migration Toolkit** 是一款由IBM提供的专业数据迁移工具,旨在帮助用户轻松地在不同的数据库系统之间进行数据源迁移。这款工具支持多种数据库平台,包括SQL Server、MySQL、Oracle以及DB2,使得在这些数据库...

    使用 IBM DB2 Migration Toolkit 迁移数据

    ### 使用 IBM DB2 Migration Toolkit 迁移数据 #### 背景介绍 随着技术的发展,企业经常需要在不同的数据库系统之间迁移数据。IBM DB2 Migration Toolkit (MTK) 是一款强大的工具,它可以帮助用户轻松地将数据从...

    MySQL Migration Toolkit 数据库转换工具

    MySQL Migration Toolkit 可以将任何数据源转换成mysql的数据,也可以将mysql的数据转换成其它类型的数据 MySQL Migration Toolkit 包括下列转换工具: Access-to-MySQL Access数据库转MySQL数据库 DBF-to-MySQL DBF...

    Live_Migration虚拟化实战

    ### Live_Migration虚拟化实战知识点解析 #### 一、Live Migration 概述 - **定义**: Live Migration(实时迁移)是指在不影响虚拟机运行的情况下,将其从一台物理服务器迁移到另一台物理服务器上的过程。 - **...

    ibm DB2 migration toolkit

    【IBM DB2 Migration Toolkit】是IBM提供的一款强大的数据库迁移工具,专为帮助用户从其他数据库系统,如Oracle、SQL Server等迁移到DB2数据库而设计。这个工具集旨在简化迁移过程,减少潜在风险,提高迁移效率,...

    ESF Database Migration Toolkit 9.x 64位补丁

    ESF Database Migration Toolkit 是一个允许您在不同数据库格式之间进行数据转换的程序。 它可以直接连接到MySQL,SQL Server, PostgreSQL,Oracle,Access,Excel,Paradox,Lotus,dBase,Visual FoxPro,Text等...

    MySQL Migration Toolkit免安装版

    MySQL Migration Toolkit是一款强大的工具,专为数据库管理员和开发人员设计,用于将各种其他数据库系统的数据迁移到MySQL。这款免安装版本使得用户无需正式安装即可直接使用,方便快捷。以下是关于MySQL Migration ...

    Migration from Hadoop Streaming to Spark

    In this talk, we will present our recent effort to migrate AEX pipeline from Hadoop streaming to Spark. We aim to reduce audience model to be refreshed at least 2x faster. We came up an innovative ...

    jakartaee-migration-1.0.0

    tomcat升级为10.x版本以后,由于JavaEE更名为Jakarta,原有的javax.*命名空间迁移为jakarta.x,原有项目如需迁移到...jar jakartaee-migration-0.2.0.jar &lt;source&gt; 命令,将新生成的war包放到webapps下即可正常使用

    多数据库迁移工具 dbMigration .NET v1.0

    dbMigration .NET 是个简单,易用,直观的多数据库迁移工具。通过 DBMigration .NET 可以在不同数据库之间轻松迁移模式和数据,不需要经过复杂的程序处理。当前支持的数据库:PostgreSQL, SQL Server, SQL Azure, ...

    数据库迁移 ESF Database Migration 7.3 破解版

    ESF.Database.Migration.Toolkit.v7.3.27 破解版 数据库迁移好工具,支持多种数据库,oracle postgresql mysql等 win7 64 位 亲测可用

    delphi migration from VB.pdf

    [Delphi Migration from VB.pdf] - Linux.org. (n.d.). *What is Linux?*. - Borland. (n.d.). *Delphi for Windows and Linux*. 以上内容仅为Delphi与Visual Basic之间迁移的部分概述,更多详细信息可参考相关...

    migration-from-MSSQL-to-MYSQL.rar_mssql_step by step

    本资料“migration-from-MSSQL-to-MYSQL.rar”详细阐述了如何从Microsoft SQL Server(MSSQL)平稳过渡到MySQL的过程,帮助IT专业人员理解并实施这一过程。 首先,让我们了解MSSQL和MYSQL的基本特性。MSSQL是微软...

    ESF Database Migration Toolkit Pro 8.2.07 + Key.tgz

    《ESF Database Migration Toolkit Pro 8.2.07 数据库迁移神器详解》 在数字化时代,数据库迁移是一项至关重要的任务,确保业务连续性并优化系统性能。ESF Database Migration Toolkit Pro 8.2.07 正是这样一款专为...

Global site tag (gtag.js) - Google Analytics