仮想メモリを使用します。自由に使用できるすべてのメモリを超えると、ディスクに書き込みます。それを超えると、例外がスローされるか、未定義の動作が発生するか、OSに依存する可能性があります。これらはSQLiteの制限です:http ://www.sqlite.org/limits.html 。
データベースの最大サイズを設定する場合は、次のSQLコマンドを実行できます。
PRAGMA page_size = 512
PRAGMA max_page_count = 195313
Perlの場合:
$dbh = DBI->connect('dbi:SQLite:dbname=:memory:');
$query_handle = $dbh->prepare("PRAGMA page_size = 512");
$query_handle->execute();
$query_handle = $dbh->prepare("PRAGMA max_page_count = 195313");
$query_handle->execute();
一時テーブルを作成し、ループを使用して、制限に達するまで多数のオブジェクトを挿入することで、テストできます。
これにより、データベースの最大サイズが100,000,256バイトに設定されます。
SQliteデータベースはページに保存されます。これにより、データベースのページサイズと最大ページ数が設定されます。ニーズに合わせてどちらのパラメーターでも遊ぶことができます。ページが大きいほどパフォーマンスは向上しますが、成長は速くなります。
これらは、sqliteがサポートするすべてのプラグマです:http ://www.sqlite.org/pragma.html#pragma_page_size 。
これはPythonでの簡単なテストです。
import sqlite3
con = sqlite3.connect(':memory:')
cur = con.cursor()
cur.execute("PRAGMA max_page_count = 195313")
cur.execute("PRAGMA page_size = 512")
cur.execute("CREATE TABLE test (random_values TEXT)")
index = 0
query = "INSERT INTO test (random_values) VALUES ('%s')" % "".join(['a' for index in xrange(1000)])
while True:
try:
c = cur.execute(query)
index += 1
except Exception as ex:
print str(ex)
break
print index * 1000
かなりすぐに、次のようなものが得られます。
sqlite3.OperationalError:データベースまたはディスクがいっぱいです
オーバーヘッドが原因でバイトを取得93915000
するので、正確に100メガバイトが必要な場合は設定を試してみてください。