如今NoSQL风行,有一个原因也是因为不须要去克意处理table的schema,直接存储数据,如许简单!所以也不会稀有据库表的迁徙问题。数据库表迁徙这一可儿一向是一个麻烦点,但我比来用了sqlite3做了个小项目,所以总结下数据库迁徙的筹划。
道理
- 每一次数据表修改,都对应一个数据库版本号
- 数据迁徙是渐进式的,比如把数据库版本大年夜1 进级到n,那么就进级n-1次,版本1到2,2到3,直到n-1到n。
实施
1. 应用sqlite3的user_version 存贮自定义的数据库版
- /*设置版本号*/
- PRAGMA user_version=1;
- /*攫取版本号*/
- PRAGMA user_version;
2. 所有的数据库进级文件,放在一个文件中,都直接应用sql文件,便利直接查看治理。文件构造如下
文件构造设计
- v1.sql v2.sql, v3.sql等 是每个数据库版本,完全的数据库定义文件
- v1tov2.sql, v2tov3.sql等 是距离版本数据库进级文件。一个数据m到n进级的过程就是,运行 v[m]tov[m+1].sql, v[m+1]tov[m+2].sql, 直到 v[n-1]tov[n].sql
- run.sh 就是每次要跑的数据迁徙脚本,包含了当前的版本号和迁徙逻辑
- 个中的v2.sql 到v[n].sql 不是必须的,只是为了便利查看当缁ゎ新的数据表设计,如不雅存在v[n].sql 那么创建新数据库也可以直接大年夜这个文件来创建
3. 迁徙脚本如下, 具体逻辑注释中已经写明
4. v[n].sql 和v[n-1]tov[n].sql 文件的最后都去须要经由过程user_version来设置数据版本为n,一个v2tov3.sql 的demo如下:
总结
【编辑推荐】
- 若何迈开MySQL数据库的安然合规应用第一步?
- 在OS X上应用 Sequel Pro 来治理MySQL数据库
- 若何选择合适的数据库机能对象?
- 分布式数据库和Hadoop都不敷好,于是我们设计分布式SQL计算体系
- Python MySQL数据库连接池组件
应用处景
今朝这套筹划合适数据量小,对停机保护可以接收的营业情况,因为须要停机进级,然则这个筹划,足够简单清楚且能知足所有不合版本间的数据进级。
不足与瞻望
- 这个筹划没有推敲到数据进级掉败的回滚。因为是小营业,所以推敲更多的是简单易保护。所以针对这种情况的,起重要包管进级脚本经由了足够的线上数据测试,经的起考验。其次,一旦产生问题,线上可以直接操作保护,写脚本。如许说,因为你都没有测试到这种须要rollback的case,你也不克不及在写进级脚本的时刻,知道这种case是如何,所以提前写好rollback的逻辑不必定可行或者合适。
- 安排时,数据迁徙之前要备份,数据量较大年夜些,用增量备份,节俭时光。备份有成熟的对象,并且备份便利进级掉败时rollback。安排的步调应当是: 拉代码build(或者拉docker镜像)-> 备份数据库 -> 进级数据库 -> 跑新的代码
- 对于Android,iOS的设备中应用sqlite3的情况,数据迁徙的逻辑是一样。sql文件构造设计可以重用,也可以写到代率攀里去治理。迁徙脚本须要转换成native的Java或者Objective-C,Swift的代码。
- 对于更大年夜的营业,多实例的的数据库迁徙可以应用Flyway
推荐阅读
据这两家大年夜学的申报,10年内,人工智能在翻译、高中程度的写作、驾驶卡车,售货员等方面将跨越仁攀类;到2050年,所有人的义务都可以由人工智能完成;到2136年,所有人的工作,都可以由>>>详细阅读
本文标题:简单数据库迁移实践
地址:http://www.17bianji.com/lsqh/35877.html
1/2 1