![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Если у вас есть база данных больших BLOB,
вы получаете лучшую производительность чтения, когда вы храните полное
содержание BLOB непосредственно в базе данных, или быстрее сохранить каждый
BLOB в отдельном файле и сохранить просто соответствующее имя
файла в базе данных? Чтобы попытаться ответить на это, мы управляли 49 тестовыми сценариями с
различными размерами BLOB и размерами страницы SQLite на рабочей станции
Linux (Ubuntu приблизительно 2011 с файловой системой Ext4 на быстром диске
SATA). Для каждого тестового сценария база данных была создана содержащей
100 МБ содержания BLOB. Размеры BLOB колебались от 10 КБ до 1 МБ.
Количество BLOB изменилось, чтобы держать полное содержание BLOB на уровне
приблизительно 100 МБ. Следовательно, 100 BLOB в 1 МБ размером и 10000 BLOB
по 10K размера и т.д. Применялся SQLite
version 3.7.8 (2011-09-19). Матрица ниже показывает, время, чтобы прочитать BLOB,
сохраненные в отдельных файлах, разделенное на время, чтобы прочитать BLOB,
сохраненные полностью в базе данных. Следовательно, для чисел, больше
1.0, быстрее сохранить BLOB непосредственно в базе данных. Для чисел, меньших
1.0, быстрее сохранить BLOB в отдельных файлах. В каждом случае размер страничного кэша
был приспособлен, чтобы держать сумму кэш-памяти на уровне приблизительно
2 МБ. Например, кэш на 2000 страниц использовался для 1024-байтовых страниц,
а кэш на 31 страницу использовался для 65536-байтовых страниц.
Значения BLOB были прочитаны в произвольном порядке. Мы выводим следующие эмпирические правила из матрицы выше: Размер страницы базы данных 8192 или 16384 дает лучшую работу
для большого BLOB I/O.
Для BLOB меньше 100KB чтение быстрее, когда BLOB сохранены
непосредственно в файле базы данных. Для BLOB больше 100 КБ чтение от
отдельного файла быстрее. Конечно, ваши результаты могут измениться в зависимости от аппаратных
средств, файловой системы и операционной системы. Перепроверьте их в расчете
на целевые аппаратные средства перед согласием на конкретный дизайн.
Choose any three.
Внутренние BLOB против внешних в SQLite
Update: New measurements for SQLite version 3.19.0
(2017-05-22) show that SQLite is about
35% faster than direct disk I/O for
both reads and writes of 10KB blobs.
Размер страницы БД Размер BLOB
10k 20k 50k 100k 200k 500k 1m
1024 1.535 1.020
0.608 0.456
0.330 0.247
0.233
2048 2.004 1.437
0.870 0.636
0.483 0.372
0.340
4096 2.261 1.886
1.173 0.890
0.701 0.526
0.487
8192 2.240 1.866
1.334 1.035
0.830 0.625
0.720
16384 2.439 1.757
1.292 1.023
0.829 0.820
0.598
32768 1.878 1.843
1.296 0.981
0.976 0.675
0.613
65536 1.256 1.255
1.339 0.983
0.769 0.687
0.609