До сих пор наше приложение использовало одну базу данных SQLite с SQLObject в качестве ORM.Очевидно, в какой-то момент мы знали, что должны столкнуться с проблемой параллелизма SQLite, и мы это сделали.
В итоге мы разбили текущую базу данных на несколько баз данных.Это означает, что каждая схема таблиц осталась прежней, но мы распределили разные таблицы по нескольким базам данных, сохраняя тесно связанные таблицы.
Теперь это работает очень хорошо при чистой установке новой версии нашего приложения, но при обновлении до предыдущих версийнаше приложение для этой новой версии требует специальной миграции данных, прежде чем наше приложение сможет начать работать.В этом случае миграция базы данных - это простое перемещение таблиц из этой единой базы данных в соответствующие разные базы данных.
В качестве примера рассмотрим старую структуру:
single_db.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
Когда произойдет обновление, наше приложение создаст новую структуру с тремя вышеуказанными базами данных и пустыми таблицами в них.Также там будет более старая база данных single_db.db со всеми таблицами и фактическими данными.Теперь, прежде чем наше приложение сможет начать работать, оно должно переместить таблицы или, я бы сказал, скопировать данные из таблицы из более старой базы данных в соответствующую таблицу в соответствующей новой базе данных.
Мне нужно будет написать код для этой миграции базы данных.Я знаю, что могу запросить таблицу, используя старое соединение с базой данных, и вставить возвращенные строки в соответствующую таблицу, используя более новое соединение с базой данных.Я должен упомянуть здесь одно предостережение: некоторые из этих таблиц могут содержать большое количество строк.То есть строк в 2/3 таблицах может быть до 2–2,5 млн.
Поэтому я хочу спросить, могу ли я использовать другие приемы SLQObject, поскольку я использую SQLObject поверх SQLite, а также кто-нибудь делал это раньше?
Спасибо за помощь.