1

だから私は、すべてのユーザーが一種のワークスペースとして機能する個別のSQLiteデータベースを取得する Web システムを持っています。すべてのデータベース ファイルは、ユーザー ID と一致するデータベース名を持つディレクトリにあります。

これらのデータベースの多くは作成され、編集されることはほとんどありません。他の人は、毎日多くの編集を行っています。

このディレクトリのバックアップを管理するには、 cronプロセスでセットアップされたSubversionを使用することをお勧めしますか? 私がこのアプローチを検討している理由の 1 つは、ユーザーが編集したワークスペースを簡単にロールバックできるようにするためです。

4

4 に答える 4

3

独自のシェル スクリプトを実行できる場合は、すべてのデータベースをプレーン SQL ファイルにダンプできます。

# sqlite3 user.db .dump .exit > user.sql

そして、SQLファイルをSubversionリポジトリに保存できます

SQL ファイルからデータベースを作成する:

# sqlite3 -init user.sql user.db .exit

于 2009-11-20T18:35:21.987 に答える
2

これらのデータベースの多くは作成され、編集されることはほとんどありません。

この場合、Subversion から多くのメリットを得ることはできません。これはバージョン管理システムであり、バックアップ システムではありません。オブジェクトに対して diff、merge などのバージョン管理操作を実行したくないので、従来のバックアップ方法からより多くのマイレージを取得できると思います。sqlite ファイルを (できる限り) 圧縮し、指定された期間アーカイブします。これを Linux システムで実行している場合は、システム ログに対して同じことを行う logrotate スクリプトのようなバックアップ スクリプトを確認できます。sqlite データベースはきれいに 1 つのファイルにパッケージ化されているため、古いバージョンの復元は簡単にスクリプト化できます (解凍して正しい場所にコピーするだけです)。

各ユーザーがデータベースに保存しているデータの量に応じて、別の方法として、テーブルのシャドウ コピーをリポジトリに保持することもできます。変更が行われると、変更される前に古いテーブルのコピーが作成されます。このようにして、以前の (または最近のいくつかの) リビジョンのコピーをデータベースに保持し、古いバックアップを掘り出す代わりに、単純なデータベース操作でそれらを復元できます。これにより、データベース全体を元に戻さずに、データベースの一部への変更を元に戻すこともできます。

于 2009-11-23T22:10:09.380 に答える
1

あなたができることの1つは次のとおりです。
*開発時に常にデータベースをsqlファイルにエクスポートします。
* MSBuild カスタム タスクで、またはアプリケーションの起動時に便利な初期化ステップで、sql ファイルをデータベース ファイルに変換します。
* SQL ファイルをデータベース ファイルにインポートして戻すには、次のような C# を使用できます。

            string sql = System.IO.File.ReadAllText(SqlFile);
            SQLiteConnection.CreateFile(DatabaseFile);

            string ConnectionString = @"Data Source=" + DatabaseFile;

            using (SQLiteConnection cn = new SQLiteConnection(ConnectionString))
            {
                using (SQLiteCommand cmd = new SQLiteCommand(sql, cn))
                {
                    cn.Open();
                    cmd.ExecuteNonQuery();
                }//cmd
            }//cn

このようにして、SQL ファイルを SVN に保持するだけで、編集可能なマージ可能なファイルを作成し、ビルド プロセス中またはアプリケーションの起動時にその場で bin db ファイルを生成することができます。

アプリケーションの開始時に db バイナリ ファイルを作成することを選択した場合、アプリケーションがディスクに書き込むための十分な権限を持っていない場合に備えて、それをメモリ内データベースにすることもできます。接続文字列は次のようになります。

データソース=:メモリ:;バージョン=3;新規=True;

于 2013-03-12T15:00:15.410 に答える
0

SQLite データベース ファイルはクリアテキスト ファイルですか、それともバイナリですか? それらがバイナリの場合、Subversion を使用してもそれほどメリットはないと思います (バックアップ システムとして使用すべきではないため)。

代わりに、古いバージョンの復元を許可したい場合は、通常のバックアップ メカニズム (rsync など) を使用し、一定期間 (実際の要件によって異なります)、毎日のバックアップを保存します。彼らが以前のバージョンを復元したい場合は、あなたに近づくことができ、あなたはそれを再生します.

于 2009-11-20T18:25:37.353 に答える