2012-04-04 14 views
1

私はSQLiteファイルを1GBにすることができます(10GBになる可能性があります)。 Office Wordと同様に、デスクトップアプリケーション(C++)の「別名で保存」および自動保存機能をエミュレートしたいと思います。 バックアップするたびにファイル全体のコピーを作成することは、私の考えでは実用的ではありません。"名前を付けて保存"のためのSQLLiteとLARGEファイルの自動保存機能

私はちょうどSAVEPOINTを調べ始めました。これはこれにアプローチする方法ですか?しかし、セーブポイントが私がちょうどセーブポイントの間に作ったインサートを照会できるようにするかどうかは私には分かりません。

フィードバックに感謝します。

また、一歩前進して、このsave-as/auto-saveメカニズムが良いアイデアであるかどうかを熟考しています。現在、すべてのSQLコマンドをファイルに即座に保存しています(たとえば、ユーザーテキストを表のコメントフィールドに入力するなど)。私は、アプリケーションに実装されている元に戻す/やり直し機能を持っています。大規模なsqliteファイルでデスクトップアプリケーションを作成する人は誰ですか?

+2

SAVEPOINTSは取引用です。したがって、トランザクションの一部ではなく、トランザクションの一部をロールバックすることができます。そして、あなたがアプリケーションを使用している間(たとえそれが単一のユーザであっても)トランザクションを開いたままにしたくないのです。 – MatBailie

+0

コメントありがとうございます。トランザクションを開いたままにしたくないのは、1)停電によってその変更が保持されないためですか? 2)オープンなトランザクション内の変更についてクエリを実行することはできません。 – jobobo

答えて

2

アプリケーションによって何が行われているかによって異なります。行を挿入したり削除したりするだけで簡単に元に戻すことができます(履歴テーブルを保持します(実行間で永続化し、元に戻す/やり直し機能をオフにしない限り、おそらくテンポラリテーブルとして最適です)。 (テーブルをコピーして古いテーブルを削除する必要があるなど)、SQLiteはテーブルの作成後に非常に限られた変更しか行えないため、元に戻すのは難しいです。つまり、各変更後にコミットしている限り、ユーザーが見ることのできない保存アクションを持つアプリケーションを作成することができます。コミットごとに自動的に変更をディスクに保存します。

は、新しいファイルにデータをコピーする必要があり、HDDの代わりにSSDを使用していても、複数のGBで時間がかかるため、「名前を付けて保存...」機能が遅くなります。本当に必要ですか?ユーザは、その時点でアプリケーションでオープンしていないとすれば、データベースファイル自体をコピーすることができます(SQLiteのようなもの)。

+0

お返事ありがとうございます。既存のテーブルエントリ(コメントフィールド)を更新し、既存のテーブル(ラベル)の行を追加および削除しています。履歴テーブルを保持すると、既存のクエリを変更する必要があります。私は何とかsqliteにそれを延期することを望んでいた... また、私は "名前を付けて保存"と2つの異なる質問として自動保存する必要があると思います。おそらく、「名前を付けて保存」機能を削除し、ユーザーが自分でコピーを作成できるようにします。しかし、私は自動保存を実装することに興味がありますが、sqliteファイル全体を完全にコピーすることはありません。ありがとう。 – jobobo

+0

@joboboクエリを保存する必要はありません。ちょうど挿入と削除。あなたが本当にやる必要があるのは、細部をじっくり見て回って一歩踏み出し、大きな画像で何が起こっているかを考えることです。何が起こっているのか、またダイビングに戻る前に全力でやり遂げようとしていることについて、あなたのベアリングを取得してください。 –

関連する問題