Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> BLOB-поля, производительность 
V
    Опции темы
WolfAlone
Дата 1.7.2011, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



Доброго времени суток!

Имеем:
1. БД (например, MySQL)
2. Тип таблиц: InnoDB.
3. 5шт. Blob-полей, размером до 2Мб

В каждом из этих полей будет храниться фотография (от 1 до 5 [1 фотография = 1 поле]).

Вопрос заключается в следующем: насколько резонно хранить фотографии непосредственно в БД? Увеличивается или снижается от этого производительность системы (сервера) в целом? В каких случаях фотографии лучше хранить именно внутри БД, а в каких лучше хранить ссылку на фото на жестком диске?
Например, поле
Код

CHAR 100

содержащее ссылку на фото на жестком диске, что-то вроде:
Код

/srv/images/photo_10.jpg


Возможно, какой-то конкретный выбор наиболее актуален для какой-то конкретной БД или типа таблиц?

P.S. Если это очень принципиально, то предполагается использование ОС: Debian 6 или FreeBSD 8, файловая система Ext3/Ext4 или UFS (соответственно). Сервер БД MySQL 5.1/5.5.


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
LSD
Дата 1.7.2011, 16:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Мое мнение: если фотографий мало и они лишь приложение к основным данным, то стоит хранить в СУБД.

Если же это сервис хранения картинок или еще какой сервис в котором объем картинок перевешивает объем остальных данных, то стоит хранить в виде файлов.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
maint
Дата 1.7.2011, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 77
Регистрация: 12.5.2008

Репутация: нет
Всего: 2



В базе, если приспичило, в отдельной таблице. Моё мнение, хранить в файловой системе.  Вообще, загрузка больших картинок на дороговато обходится. По моему, технология такая: высасываем из базы, создаётся времянка на диске и потом показывается. Так, кажется. 
PM   Вверх
WolfAlone
Дата 1.7.2011, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



Благодарю за ценную информацию! В моём случае фото (от 1 до 5шт.) - это "приложение" к остальным данным. Примером может служить, допустим таблица с объявлениями, например, о продаже машин, которая содержит следующие данные (исключительно для примера): Марка машины, текст объявления, цена, *ещё каких-нибудь 3-5 текстовых полей* + 1-5 фото. Максимальный размер, которого может достигать 1 фотография = 2Мб. То есть, при самом "худшем" раскладе, общий объём занимаемого фотографиями пространства составит 10Мб. Всё фото относятся исключительно к конкретной записи (в нашем примере, к конкретному объявлению).
  • На данный момент нагрузка на БД не очень большая (не более 1тыс. запросов в сутки), но будет постепенно расти до ~50тыс. запросов в сутки.
  • В данный момент выбрана БД MySQL с таблицами InnoDB (т.к. используются внешние ключи), но сервер БД может быть заменён на любой другой, при необходимости (FireBird, PostgreSQL и другие)
  • База данных необходимо для веб-проекта (то есть, картинки будут отдаваться через браузер)

Объясню чем мотивирован мой вопрос. В плане "удобства" хранения самих фотографий (на диске или в БД) - у меня принципиальных предпочтений нет. Но, в плане резервного копирования, хранить всё в БД, лично мне было бы гораздо удобнее, т.к. это позволит "отделить мух от котлет". То есть, платформа отдельно, все данные в БД - отдельно. Но, если хранение изображений внутри БД значительно скажется на производительности (снижение производительности более чем на 20-30%), то от такого способа мне придётся отказаться.

P.S. Объём изображений (в байтах) однозначно будет превышать объём текстовых данных, возможно в несколько десятков или даже сонет раз. То есть, текст у нас занимает до 100Кб в строке, картинки могут занимать до 10Мб.


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
gcc
Дата 1.7.2011, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: нет
Всего: 17



лучше PostgreSQL, Oracle 
хотя, MySQL умеет буферизировать данные при выдачи

но если понадобиться сделать бэкапы, то будут проблемы, твой сервис будет не работоспособный пока бэкап не загрузиться, по-моиму smile
или raid1 - то там как будут хз (но дополнительная стоимость на raid1)

есть, например MogileFS протестированная на миллионы пользователей и на большой общий объем
подробности с бэкапом не знаю, но крупные сервсиы используют ее, видимо работает smile



Это сообщение отредактировал(а) gcc - 1.7.2011, 17:35
PM WWW ICQ Skype GTalk Jabber   Вверх
WolfAlone
Дата 1.7.2011, 17:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



gcc, к сожалению выбор ФС ограничен только 2-мя (3-мя), а именно: Ext3 (Ext4) или UFS. Поставить PostgreSQL вместо MySQL - не составляет никакого труда, платформа умеет работать с большим разнообразием БД.

Цитата(gcc @  1.7.2011,  17:31 Найти цитируемый пост)
но если понадобиться сделать бэкапы, то будут проблемы, твой сервис будет не работоспособный пока бэкап не загрузиться

возможно я ошибаюсь, но мне кажется многие БД позволяют делать "горячий" бэкап, то есть, бэкап без остановки сервера, не зависимо от наличия в базе BLOB-полей и их содержимого.


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
gcc
Дата 1.7.2011, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: нет
Всего: 17



WolfAlone, MogileFS - это не Posix (не встроенная в ОС, а внешние проложение)

Добавлено @ 17:45
Цитата(WolfAlone @ 1.7.2011,  17:37)
возможно я ошибаюсь, но мне кажется многие БД позволяют делать "горячий" бэкап, то есть, бэкап без остановки сервера, не зависимо от наличия в базе BLOB-полей и их содержимого.

я имел ввиду, если сервер перезагрузиться, то надо будет восстанавливать таблицы, а они могут не восстановиться и нужно будет бэкап ЗАЛИВАТЬ... (но есть raid1 который зерклирует...)
и если сервер очень нагруженные - это всегда плохо если делать бэкап в этот момент... бывает все падает и ФС разваливается smile

Это сообщение отредактировал(а) gcc - 1.7.2011, 17:50
PM WWW ICQ Skype GTalk Jabber   Вверх
WolfAlone
Дата 1.7.2011, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



gcc, благодарю за информацию! Обязательно учту этот момент!


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
WolfAlone
Дата 2.7.2011, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



LSD, хотелось бы услышать Ваши рекомендации по приведённому выше случаю. Какой сервер БД лучше использовать? Стоит ли хранить данные в БД если текст занимает не более 100Кб, а изображения не более 10Мб на 1 строку (запись)?

P.S. Всех благодарю за внимание. Так же, буду благодарен за любую информацию и личный опыт касательно выше приведённого случая.


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
LSD
Дата 4.7.2011, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Цитата(WolfAlone @  2.7.2011,  02:35 Найти цитируемый пост)
хотелось бы услышать Ваши рекомендации по приведённому выше случаю. Какой сервер БД лучше использовать? Стоит ли хранить данные в БД если текст занимает не более 100Кб, а изображения не более 10Мб на 1 строку (запись)?

BLOB удобен тем, что оне хранится в БД и при правильном использовании (транзакции, ссылочная целостность и т.д.), у тебя всегда будут согласованные данные. У тебя не будет ситуации когда в БД есть запись, а на диске его нет. Или наоборот, в БД запись удалили, а файл остался и занимает место. С другой стороны файлы гораздо производительней, чем BLOB поля.

Я так понимаю у тебя будет некий сайт с объявлениями и фотографии нужно будет показывать на веб страничке, так?
Мне кажется, что СУБД сама по себе не справится с такой нагрузкой. Вернее конечно она может справится, но это будет непропорционально затратам на тюнинг и железо для СУБД. С помощью файлов эта задача решается гораздо проще, да и отдачей фалов клиенту будет заниматься веб сервер, не дергая СУБД. С другой стороны если у тебя между базой и веб сервером есть прослойка кеширующих in memory database, то тут можно картинки и в BLOB писать, главное чтобы хватило памяти.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
WolfAlone
Дата 6.7.2011, 03:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



LSD, спасибо большое! Вопрос на данный момент решил так:
1. Мелки картинки (до 100Кб./1шт.), в не очень большом количестве (ориентировочно до 1тыс. записей, максимально, реально - порядка 50 записей) - засовываю в БД, что бы сохранить целостность данных
2. Картинки побольше (все остальные) - раскладываю по файловой системе

*частичто, такому решению поспособствовало то, что статику будет отдавать nginx, и дабы он "не простаивал напрасно"...  smile 


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
WolfAlone
Дата 6.7.2011, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



Остался пожалуй единственный вопрос по этому поводу. Возможно кто-то проводил эксперименты над БД, со стандартными настройками (без "тюнинга")? Интересует примерная цифра потери производителности при записи данных в BLOB-поля и "доставанию" их оттуда с последующей отдачей через серверный скрипт, с такой же отдачей файла, но не из BLOB-поля, а непосредственно через сам веб-сервер?

Интересует примерный % потери производительности, с учётом того, что БД и Веб-сервер находятся на одной и той же машине (то есть, время на сетевой трафик - минимально).

Конкретно, интересуют следующие БД: 
  • MySQL 5+
  • Postgresql 8+
  • FireBird 2.5+



--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
LSD
Дата 6.7.2011, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Эксперимент не проводил, но по моим ощущениям речь идет не о процентах, а о разах.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
WolfAlone
Дата 6.7.2011, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


В экстазе
***


Профиль
Группа: Завсегдатай
Сообщений: 1010
Регистрация: 16.9.2008
Где: Рай

Репутация: нет
Всего: 5



LSD, Ещё раз спасибо Вам большое!

P.S. Никак не могу поставить "+" (пишет, что сутки ещё не прошли).


--------------------
И сказал Бог: "Тогда я построю свой мир с блэк-джеком и шлюхами!"

Ф топку Ubuntu, Debian наше фсё!

(с) Евгений Вольф
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0998 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.