SQLite - предварительно выделяя размер базы данных - PullRequest
1 голос
/ 06 мая 2009

Есть ли способ предварительно выделить базу данных SQLite для определенного размера? В настоящее время я добавляю и удаляю несколько записей и хотел бы избежать этого во время создания.

Ответы [ 2 ]

5 голосов
/ 27 января 2011

Самый быстрый способ сделать это с помощью функции zero_blob:

Пример:

Y:> sqlite3 large.sqlite
SQLite версия 3.7.4
Введите ".help" для получения инструкций
Введите операторы SQL, оканчивающиеся на «;»
sqlite> создать таблицу большого размера (a) ;
sqlite> вставить в большие значения (zeroblob (1024 * 1024));
sqlite> большой стол для переноски;
sqlite> .q

Y:> dir large.sqlite
Объем в диске Y Личный
Серийный номер тома 365D-6110

Справочник Y: \

01/27/2011 12:10 PM 1 054 720 Large.sqlite


Примечание: Как правильно указывает Кайл в своем комментарии:

Существует ограничение на размер каждого большого двоичного объекта, поэтому вам может потребоваться вставить несколько больших двоичных объектов, если вы ожидаете, что размер вашей базы данных превышает ~ 1 ГБ.

2 голосов
/ 06 мая 2009

Есть взлом. Вставьте кучу данных в базу данных до тех пор, пока размер базы не станет тем, что вам нужно, а затем удалите данные. Это работает, потому что:

"Когда объект (таблица, индекс или триггер) удаляется из базы данных, он оставляет пустое пространство. это пустое место будет использовано повторно время новая информация добавляется в база данных. Но тем временем файл базы данных может быть больше, чем строго необходимо. "

Естественно, это не самый надежный метод. (Кроме того, вам нужно убедиться, что auto_vacuum отключен, чтобы это работало). Вы можете узнать больше здесь - http://www.sqlite.org/lang_vacuum.html

...