到目前为止,我们的应用程序一直在使用一个以 SQLObject 作为 ORM 的 SQLite 数据库。显然,在某些时候我们知道我们必须面对 SQLite 并发问题,所以我们做到了。
我们最终将当前数据库拆分为多个数据库。这意味着每个表模式保持不变,但我们将不同的表分布到多个数据库中,将紧密耦合的表保持在一起。
现在,这在我们应用程序的新版本的全新安装中非常有效,但是升级到我们应用程序的以前版本到这个新版本需要在我们的应用程序开始工作之前进行特殊的数据迁移。在这种情况下,数据库迁移很简单,将表从这个单一数据库移动到适当的不同数据库中。
举例来说,考虑这是较旧的结构:
single_db.db --- 单个数据库
* A -- Table A
* B -- Table B
* C -- Table C
* D -- Table D
* E -- Table E
* F -- Table F
新结构:
db1.db --- 数据库 1
- A -- Table A
- B -- Table B
- C -- Table C
- D -- Table D
db2.db --- 数据库 2
- E -- Table E
db3.db --- 数据库 3
- F -- Table F
当升级发生时,我们的应用程序将使用上述 3 个数据库和其中的空表创建新结构。带有所有表和实际数据的旧数据库 single_db.db 也将在那里。现在,在我们的应用程序开始工作之前,它应该移动表,或者我应该说将数据从旧数据库中的表复制到相应新数据库中的相应表中。
我需要为此数据库迁移编写代码。我知道我可以使用较旧的数据库连接查询表,并使用较新的数据库连接将返回的行插入到相应的表中。我应该在这里提到的一个警告是,其中一些表可以包含大量行。也就是说,2/3 表中的行数可以达到 2 - 250 万。
所以想问一下我是否可以使用任何其他 SLQObject 技巧,因为我在 SQLite 之上使用 SQLObject 并且以前有没有人这样做过?
谢谢你的帮助。