これまで、私たちのアプリケーションは、SQLObject を ORM として持つ 1 つの 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 万まで可能です。
SQLiteの上でSQLObjectを使用していて、以前に誰かがこれを行ったことがあるので、他のSLQObjectトリックを使用できるかどうか尋ねたいですか?
ご協力いただきありがとうございます。