0

オブジェクトのコレクションを使用するアプリがあり、非常に高速です。現在、永続性のためにデータベースを追加しているので、SQLite データベースに保存し始めました。

しかし今、私ははるかにゆっくりと見つけました。ディスクがRAMより遅いためだと思います。DBをメモリに入れることは可能ですか?SQLite のドキュメントでInmemory DBを見つけましたが、これはメモリ内にあり、永続性が必要です。

それで、パフォーマンスのためにDBをメモリに入れ、しばらくしてからディスクに保存することは可能ですか?

ありがとうございます。

アップデート:

回答では、私がたくさんの挿入を行っているからだと言っていますが、これは本当です。彼らは私が一括挿入をするべきだと言っています。

私のコードは、Computers というメモリ コレクションで次のようになります。

foreach (line in lines)
{
Computers.Add(new Computer { ComputerName = line});
}

今DBに:

    foreach (line in lines)
    {
string sql = "INSERT into computers VALUES ('"+computerName+"')";
SQLiteCommand command = new SQLiteCommand(sql, dbConnection);                            command.ExecuteNonQuery();
    }

単一の一括挿入でこれを行うにはどうすればよいですか?

4

2 に答える 2

2

これを行うには、Backup API を使用できます。http://www.sqlite.org/backup.htmlを参照してください 。C の完全なコード サンプルが提供されています。

一度に多数の挿入を行う場合は、それらを 1 つのトランザクションにまとめてください。そうしないと、SQLite は挿入ごとに 1 つのディスク ローテーションを待機するため、挿入プロセスが大幅に遅くなる可能性があります。これを行うと、ディスクベースの SQLite データベースをスローダウンなしで使用できるようになる場合があります。

関連項目
SQLite の挿入が非常に遅いですか?

于 2013-01-28T21:16:09.357 に答える
0

メモリ内にデータベースがあり、たまにしかディスクにフラッシュしない場合、データベースの最も重要な機能の 1 つであるACIDが失われます。つまり、アプリは永続化されていると考えてデータを書き込むことができ、その後の問題によってデータが失われる可能性があります。

多くのデータベースは、頻繁にアクセスされるアイテムをキャッシュするのに十分な RAM をデータベースに使用できる場合、(それでも RAM 内のソリューションよりもはるかに低速ですが) 十分に機能します。

データベースとのやり取りで何が遅いのかを正確に調べることから始めます。何度も変更されないデータを取得していますか? おそらくそれをデータベースにキャッシュしますか?単一の更新に組み合わせることができる、データベースに対して多数の個別の更新を行っていますか?

于 2013-01-28T21:17:18.987 に答える