0

Android の OrmLite の例の「HelloTwoDbs」の例を使用して、二重データベースの使用を同時に確認しました。

OrmLite を使用して複数のデータベースをセットアップしていると仮定すると、両方の異なるデータベースに問題なく同時に書き込むことができますか? データベースごとに「一度に 1 つのスレッド書き込み」のみですが、両方の書き込みスレッド (データベースごとに 1 つ) が同時に実行されます。

私はこれを 1 つのエミュレーターで次のコードで実際にテストしましたが、問題はありませんでしたが、OrmLite で実際にサポートされていて、将来問題が発生しないかどうかはまだ不安です.

ところで、私は小さなソーシャル インタラクション アプリを作りたいので、2 つの異なるデータベース アプローチを使用する傾向があります。また、主にユーザー生成コンテンツが同期および変更されるため、いくつかの理由でアプリケーションの静的コンテンツからユーザー生成コンテンツを分離したいと考えています。アプリケーションの静的コンテンツよりも高速な方法です。また、2 つのデータベースを使用すると、実際には両方のコンテンツを同時に異なるソースから異なるデータベースに同時に更新できます。

可能であれば、私を助けてください。=)


HelloTwoDbs.javaで「doOtherStuff」を呼び出すだけで、サイトの例に基づいて行った小さなテスト:

追加 ->

private void doOtherStuff() {

new Thread(new Runnable() {
    @Override
    public void run() {
        Log.e(LOG_TAG, "Started 1");

        final DatabaseHelper1 databaseHelperA = getHelper1();

        try {

            final Dao<SimpleData, Integer> simpleDao = databaseHelperA.getSimpleDataDao();

            for (int i = 0; i < 5000; i++) {
                Log.e(LOG_TAG, "Adding (1): " + i);
                simpleDao.create(new SimpleData(i));

            }
        } catch (SQLException e) {
        }
    }
}).start();

new Thread(new Runnable() {
    @Override
    public void run() {
        Log.e(LOG_TAG, "Started 2");

        final DatabaseHelper2 databaseHelperB = getHelper2();

        try {

            final Dao<ComplexData, Integer> complexDao = databaseHelperB.getComplexDataDao();

            for (int i = 0; i < 5000; i++) {
                Log.e(LOG_TAG, "Adding (2): " + i);
                complexDao.create(new ComplexData(i));

            }
        } catch (SQLException e) {
        }
    }
}).start();
}
4

1 に答える 1

1

OrmLite で複数のデータベースをセットアップしていると仮定すると、両方の異なるデータベースに問題なく同時に書き込むことができますか?

そう思うでしょう、はい。実際には、複数のスレッドを使用して単一のデータベースに書き込むことができます。SQLite はデータベース レベルのロックを行うため、2 番目のスレッドは最初の操作が完了するまで待機します。

同じデータベースに対して複数の接続を開いている場合にのみ、問題が発生します。この場合、データが破損します。

于 2013-12-18T21:00:06.437 に答える