Чтение небольших блобов из SQLite на 35% быстрее, чем из фай
От: wildwind Россия  
Дата: 14.06.17 07:15
Оценка: 29 (5)
Возвращаясь к вечному вопросу "Хранить ли картинки в базе или в файловой системе?".

Команда SQLite провела небольшое исследование, сравнив производительность работы с небольшими (8-12 Кб) блобами, размещенными в базе SQLite и в файловой системе. Результаты, конечно, варьируются в зависимости от ОС, железа и настроек SQLite, но выигрыш SQLite достигал 35%. Основная причина, по мнению авторов — накладные расходы на открытие/закрытие файлов. В случае файловой системы они имеют место при каждой операции.

Пара графиков:


Chart 1: SQLite read latency relative to direct filesystem reads.
100K blobs, avg 10KB each, random order using SQL




Chart 4: SQLite write latency relative to direct filesystem writes.
10K blobs, avg size 10KB, random order,
WAL mode with synchronous NORMAL,
exclusive of checkpoint time
Отредактировано 14.06.2017 7:17 wildwind . Предыдущая версия . Еще …
Отредактировано 14.06.2017 7:16 wildwind . Предыдущая версия .
Re: SQLite4
От: Qbit86 Кипр
Дата: 14.06.17 07:22
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Команда SQLite...


Не слежу за темой, но: что там у них с SQLite4? На официальном сайте последняя версия всё ещё значится 3.19.3.
Глаза у меня добрые, но рубашка — смирительная!
Re: Чтение небольших блобов из SQLite на 35% быстрее, чем из фай
От: Qulac Россия  
Дата: 14.06.17 08:23
Оценка: 5 (1)
Здравствуйте, wildwind, Вы писали:

W>Возвращаясь к вечному вопросу "Хранить ли картинки в базе или в файловой системе?".


W>Команда SQLite провела небольшое исследование, сравнив производительность работы с небольшими (8-12 Кб) блобами, размещенными в базе SQLite и в файловой системе. Результаты, конечно, варьируются в зависимости от ОС, железа и настроек SQLite, но выигрыш SQLite достигал 35%.Основная причина, по мнению авторов — накладные расходы на открытие/закрытие файлов. В случае файловой системы они имеют место при каждой операции.


Поэтому картинки хранят в одном большом файле, который постоянно открыт, а базе только индекс начала файла картинки и его длинна. Вроде бы яндекс так и поступает.
Программа – это мысли спрессованные в код
Re: Чтение небольших блобов из SQLite на 35% быстрее, чем из фай
От: Alex.Che  
Дата: 14.06.17 08:49
Оценка:
ога.
и сидит всё это в кэше...
Posted via RSDN NNTP Server 2.1 beta
Re: Чтение небольших блобов из SQLite на 35% быстрее, чем из фай
От: vsb Казахстан  
Дата: 14.06.17 09:32
Оценка:
Для постгреса бы кто потестил. Я когда-то делал, что картинки лежат в файле причем отдаёт их nginx, вроде как у него какой-то свой кеш ещё есть помимо стандартного файлового. Вроде быстро работало.
Re[2]: Чтение небольших блобов из SQLite на 35% быстрее, чем из фай
От: wildwind Россия  
Дата: 14.06.17 15:46
Оценка: +3
Здравствуйте, Qulac, Вы писали:

Q>Поэтому картинки хранят в одном большом файле, который постоянно открыт, а базе только индекс начала файла картинки и его длинна. Вроде бы яндекс так и поступает.


Ну да. Осталось только разобраться с обновлениями, фрагментацией, согласованностью с основной базой и т.п. И получится практически тот же SQLite, только слепленный на коленке.
Re[3]: Чтение небольших блобов из SQLite на 35% быстрее, чем из фай
От: Qulac Россия  
Дата: 14.06.17 16:46
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, Qulac, Вы писали:


Q>>Поэтому картинки хранят в одном большом файле, который постоянно открыт, а базе только индекс начала файла картинки и его длинна. Вроде бы яндекс так и поступает.


W>Ну да. Осталось только разобраться с обновлениями, фрагментацией, согласованностью с основной базой и т.п. И получится практически тот же SQLite, только слепленный на коленке.


По скорости для классического HDD диска это самый быстрый способ. Если пользователь удалил данные, то обновляется только бд. Файл остается неизменным, так что с дефрагментацией проблем нет. При условии, что лишь небольшая часть данных будет удалена — это вполне приемлемое решение.
Программа – это мысли спрессованные в код
Re[4]: Чтение небольших блобов из SQLite на 35% быстрее, чем из фай
От: · Великобритания  
Дата: 14.06.17 22:04
Оценка:
Здравствуйте, Qulac, Вы писали:

Q> W>Ну да. Осталось только разобраться с обновлениями, фрагментацией, согласованностью с основной базой и т.п. И получится практически тот же SQLite, только слепленный на коленке.


Q> По скорости для классического HDD диска это самый быстрый способ. Если пользователь удалил данные, то обновляется только бд. Файл остается неизменным, так что с дефрагментацией проблем нет. При условии, что лишь небольшая часть данных будет удалена — это вполне приемлемое решение.

Тавтология какая-то. "При условии, что неиспользованных фрагментов мало, с дефрагментацией проблем нет". Гхм, ну да.
avalon/2.0.1
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: SQL Server
От: Spinifex Россия https://architecture-cleaning.ru/
Дата: 15.06.17 05:48
Оценка: 14 (1)
Древнее исследование от Microsoft на эту тему: To BLOB or Not To BLOB: Large Object Storage in a Database or a Filesystem?
Ответ на этот вопрос зависит от среднего размера файла. Т.е. если файлы большие, то лучше их хранить как файлы. Мелкие в базе. После этого исследования в Sql Server появились файлстримы, так что можно их использовать и быть довольным
Re: Чтение небольших блобов из SQLite на 35% быстрее, чем из фай
От: fin_81  
Дата: 15.06.17 07:08
Оценка:
Здравствуйте, wildwind, Вы писали:

W>... Основная причина, по мнению авторов — накладные расходы на открытие/закрытие файлов. В случае файловой системы они имеют место при каждой операции ...


Естественно база sqlite использовалась в однопользовательском и скорее всего однопоточном режиме. В то время файловая система многопользовательская и многопоточная. Странно было бы, если sqlite был медленнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.