|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
Прочитал холивар по поводу хранения изображений в БД в виде blob на сайте. Но там речь идет о таком монстре как ms sql server. А как быть с sqlite. К примеру уже имеется изображений почти на 500 Mb. Сейчас в БД у меня хранится ссылка на картинку. Или рациональней все же запихать их в blob? Какие ваши мнения? ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2009, 08:55 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
mrbrooks, 1) По умолчанию размер записи в sqlite 1 МБ. Или картинка должна быть меньше 1МБ или пересобирать dll. 2) Что с этими картинками делать потом? Т.е. как обрабатывать? Если они в конечном счете все равно файлами нужны, то наверное лучше сразу файлами и хранить, иначе получится цепочка "достать из базы, сохранить во времен. директории, отдать файл". Если нужно в памяти обрабатывать, то можно и в базе хранить. 3) Что там по производительности получится в обоих случаях не знаю, надо замерять. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2009, 09:51 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
Сержmrbrooks, 1) По умолчанию размер записи в sqlite 1 МБ. Или картинка должна быть меньше 1МБ или пересобирать dll. 2) Что с этими картинками делать потом? Т.е. как обрабатывать? Если они в конечном счете все равно файлами нужны, то наверное лучше сразу файлами и хранить, иначе получится цепочка "достать из базы, сохранить во времен. директории, отдать файл". Если нужно в памяти обрабатывать, то можно и в базе хранить. 3) Что там по производительности получится в обоих случаях не знаю, надо замерять. 1. Я работаю через net connector. Надо будет покурить по этому поводу мануал к нему. Но 1 Mb достаточно. 2. Картинки чисто для превью. Выходит с этой точки зрения кошернее хранить в БД. 3. Вот и я о чем =). Как то ради спортивного интереса влом заводить в БД более 3000 изображений. =) ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2009, 10:02 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
Я сохраняю картинки в BLOB. Работаю с iPhone проверял до 12000 PNG 480x320, отклик системы заметно быстрее, чем при считывании файла. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2009, 10:38 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
Игорь СойниковЯ сохраняю картинки в BLOB. Работаю с iPhone проверял до 12000 PNG 480x320, отклик системы заметно быстрее, чем при считывании файла. понял тебя камрад. что же - засучу рукава и поюзаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2009, 10:44 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
Сержmrbrooks, 1) По умолчанию размер записи в sqlite 1 МБ. Или картинка должна быть меньше 1МБ или пересобирать dll. Обманываете. Смотрим http://www.sqlite.org/limits.html Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2009, 14:16 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
mrbrooksПрочитал холивар по поводу хранения изображений в БД в виде blob на сайте. Но там речь идет о таком монстре как ms sql server. А как быть с sqlite. К примеру уже имеется изображений почти на 500 Mb. Сейчас в БД у меня хранится ссылка на картинку. Или рациональней все же запихать их в blob? Какие ваши мнения? Зависит от ситуации. Если картинки более 16 кБ каждая, лучше на диске, если меньше, можно настроить размер страницы БД и хранить в ней. Если у вас ФС ext3, то можно хранить на диске, а если что-то из виндовых - лучше хранить в БД. Если у вас высокая интенсивность обновления, лучше на диске, иначе база может оказаться [почти] непрерывно залочена. Что касается производительности - тестировал хранение 100 миллионов картинок размером 1 кБ (превью) в базе, получил базу на 100 Гб, все ок. Разумеется, в таблице должно быть только одно поле - сам blob, всю остальную инфу необходимо хранить в другой таблице/таблицах (это нужно для обеспечения высокого быстродействия). ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2009, 14:24 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
MBGОбманываетеА ведь верно. Цифра в 1мб засела в голове со времен версий 2.х ... |
|||
:
Нравится:
Не нравится:
|
|||
27.11.2009, 19:25 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
MBG, картинки в среднем от 300 до 600 кб. ось - винда. обновление - если только при редактировании записи. что посоветуете? =) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2009, 10:33 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
mrbrooksMBG, картинки в среднем от 300 до 600 кб. ось - винда. обновление - если только при редактировании записи. что посоветуете? =) Я бы хранил в эскулайт базе. Виндовые ФС это что-то с чем-то, не зря гугл эф и многие другие приложения используют именно единый файл собственного формата для хранения изображений. Хранить, например, так: create table photo ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, body blob ); CREATE TABLE photo_meta ( id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, save_date REAL, delete_date REAL, user_id integer NOT NULL, name text collate russian NOT NULL, size integer NOT NULL DEFAULT 0, checksum text NOT NULL DEFAULT '' ); Т.к. СУБД у нас с построчным хранением, то извлечение любого поля требует прочитать всю строку целиком, так что, если хранить блобы вместе с описанием файлов, то любые операции с такой таблицей станут очень неэффективны. Разумеется, в приведенном выше варианте значения поля id должны совпадать в обеих таблицах. Ключевое поле определено так, что идентификатор не может повторяться, даже если соотвествующая запись была удалена из таблицы - это удобно для репликации и восстановления случайно удаленного из дампов; если вам это не нужно, то можно чуть ускорить вставку, отказавшись от уникальности ключа. Поле delete_date позволяет вместо физического удаления просто помечать записи как удаленные, их можно легко восстановить. Эскулайт поддерживает incrblob API, позволяющие потоково работать с блобами, но в вашей задаче вряд ли это нужно. Впрочем, см. http://sqlite.org/tclsqlite.html#incrblob и сишный интерфейс. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2009, 13:40 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
MBG, Спасибо. Буду организовывать хранение картинки в БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2009, 14:59 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
mrbrooksMBG, Спасибо. Буду организовывать хранение картинки в БД. Установите pragma page_size как минимум в 4 Кб, а то будете удивляться, почему медленно работает :-) К примеру, у постгреса по дефолту 8 Кб, а у эскулайт - 1 Кб. Притом увеличение с 1к до 4к дает 3-х кратный выигрыш производительности (увеличивать далее есть смысл, когда нужно хранить именно блобы). Можно и 32к попробовать, в рассылке эскулайта говорили, что для блобов на компакт-дисках самое то (под линуксом пробовал, разницы не видно, а под виндой не смотрел). ... |
|||
:
Нравится:
Не нравится:
|
|||
30.11.2009, 15:11 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
MBG Установите pragma page_size как минимум в 4 Кб, а то будете удивляться, почему медленно работает :-) Вот с этим сложнее ). Работаю через net.connector ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2009, 08:53 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
mrbrooksMBG Установите pragma page_size как минимум в 4 Кб, а то будете удивляться, почему медленно работает :-) Вот с этим сложнее ). Работаю через net.connector Разве в нем нет возможности произвольные sql-запросы выполнять? Даже если так, то что мешает открыть базу через эскулайт шелл и настроить? Хинт: если база не пустая, то после установки этой прагмы нужно сделать vacuum. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2009, 14:03 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
MBG, был не прав. нашел в строке подключения к БД вот это: автор SQLiteConnectionStringBuilder.PageSize; Gets/Sets the page size for the connection. Подозреваю оно и есть. Опробуемс. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2009, 17:01 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
MBG, сделал: Код: plaintext 1. 2.
теперь появляется мессага авторThe database disk image is malformed и собственно все. Хорошо что хоть бэкап сделал. Гы. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2009, 11:59 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
mrbrooksMBG, сделал: Код: plaintext 1. 2.
теперь появляется мессага авторThe database disk image is malformed и собственно все. Хорошо что хоть бэкап сделал. Гы. Вы бы рассказали, как этого добились :-) На ext3 за 5 лет активного использования в продакшен и тестирования мне такого не удалось сделать, хотя на на винмобайле у юзеров иногда бывает, когда КПК по питанию глючит. У вас случаем ФС не fat32? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2009, 12:44 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
MBGmrbrooksMBG, сделал: Код: plaintext 1. 2.
теперь появляется мессага авторThe database disk image is malformed и собственно все. Хорошо что хоть бэкап сделал. Гы. Вы бы рассказали, как этого добились :-) На ext3 за 5 лет активного использования в продакшен и тестирования мне такого не удалось сделать, хотя на на винмобайле у юзеров иногда бывает, когда КПК по питанию глючит. У вас случаем ФС не fat32? Никакого секрета нет =) Результат один - как через ado.net так и через админскую прогу - sqlite expert - выполняю приведенный выше запрос и аллес капут. фс - ntfs. я сейчас попробую на голой базе это попробывать. и если все гуд - импортировать данные. по результату отпишусь. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2009, 14:55 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
MBG, Разобрался методом проб и ошибок. Оказывается БД портилась из-за того что я выполнял все действия в запароленной БД. Стоило мне поменять пароль на пустой - все прошло на ок - затем можно без проблем вернуть пароль обратно. Во как. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2009, 15:22 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
в общем при обращении к базе в 180 мб гнется все что может. Учитывая положительные отзывы о SQLlite грешу только на сам ADO.NET. Это просто не реально хранить в БД картинки. Даже не обращаясь к самой таблице с изображениями тормоза неимоверные. Остановлюсь на варианте хранения на диске. Все достаточно быстро. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2009, 16:19 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
mrbrooksв общем при обращении к базе в 180 мб гнется все что может. Учитывая положительные отзывы о SQLlite грешу только на сам ADO.NET. Это просто не реально хранить в БД картинки. Даже не обращаясь к самой таблице с изображениями тормоза неимоверные. Остановлюсь на варианте хранения на диске. Все достаточно быстро. Так вы нашли самые большие из доступных грабель и прыгнули на них с высоты :-) Возьмите враппер с сайта эскулайт, там есть варианты для разных сред. Сам я работал с эскулайт напрямую, вкомпиливая в сишное приложение, и на tcl, проблем под виндой и винмобайл не было (и это притом, что софт исходно пишется под дебианом, ибо так удобнее). ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2009, 19:21 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
mrbrooksв общем при обращении к базе в 180 мб гнется все что может. Учитывая положительные отзывы о SQLlite грешу только на сам ADO.NET. Это просто не реально хранить в БД картинки. Даже не обращаясь к самой таблице с изображениями тормоза неимоверные. Остановлюсь на варианте хранения на диске. Все достаточно быстро. Стало интересно... Недолго думая, создал следующую структуру: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9.
Файлов под рукой было фотографий 400 с хвостом штук (от 600кб до 1900кб). И около 4000 всяких разных пиктограмм. Они понятное дело мелкие. Залил их все в базу несколько раз, чтобы объемы нагнать. Результаты следующие: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41.
... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2009, 06:59 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
Да, забыл добавить что версия 3.6.20 стандартная. Все прагмы по дефолту, кроме двух приведенных. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2009, 07:04 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
MBG, дык я понял - но прихоть не моя. Сам клиент фактически готов и переписывать его под визуальную сишную библу желания нет. :) Серж, спасибо за интересный тест. Меня тоже озадачили мои результаты. Ибо что админская прога, что работа из VS (причем под используемым коннектором) давали достаточно неплохие результаты. Значит трабла со стороны моего клиента однозначно. Путем вылизывания строки подключения добился сносных результатов. На машине 2,4 GH P4 512 ОЗУ время на возврат всех записей составило порядка 8 секунд + секунд 20 на прорисовку быдлогуя. Однако уже на машине 1,7 GH P4 512 ОЗУ - порядка 68 секунд + плюс столько же на быдлогуй =) Это уже хуже. Хотя по сравнению с тем, что творилось вчера - это прогресс. Буду оттачивать подключение. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2009, 14:23 |
|
Как быть с хранением картинок именно в SQLite
|
|||
---|---|---|---|
#18+
mrbrooksMBG, дык я понял - но прихоть не моя. Сам клиент фактически готов и переписывать его под визуальную сишную библу желания нет. :) Серж, спасибо за интересный тест. Меня тоже озадачили мои результаты. Ибо что админская прога, что работа из VS (причем под используемым коннектором) давали достаточно неплохие результаты. Значит трабла со стороны моего клиента однозначно. Путем вылизывания строки подключения добился сносных результатов. На машине 2,4 GH P4 512 ОЗУ время на возврат всех записей составило порядка 8 секунд + секунд 20 на прорисовку быдлогуя. Однако уже на машине 1,7 GH P4 512 ОЗУ - порядка 68 секунд + плюс столько же на быдлогуй =) Это уже хуже. Хотя по сравнению с тем, что творилось вчера - это прогресс. Буду оттачивать подключение. Для запросов делайте "explain query plan select ..." и смотрите, где индексов не хватает. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.12.2009, 01:14 |
|
|
start [/forum/moderation_log.php?user_name=Nike+Jagger]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
1ms |
others: | 391ms |
total: | 579ms |
0 / 0 |