beldmit: (Программизм)
Dmitry Belyavskiy ([personal profile] beldmit) wrote2010-12-19 12:18 am
Entry tags:

SQL Antipatterns

Дочитал книгу "SQL Antipatterns". Книга понравилась.

Непрограммисты могут сходить по ссылке полюбоваться обложкой. Программисты - под кат.



С автором я согласен почти во всем. Собственно, единственное место, где не согласен - это идея хранить файлы в базе. Да, есть ситуации, когда это упрощает жизнь, но для известных мне случаев это неверно.

Набор антипаттернов показался до боли знакомым. За 10 лет я по ним прошелся полностью. И некоторое количество шишек набил, и подпорки ставил. Кое-где не ходил, потому что глупость подхода очевидна. Рассмотрено хранение деревьев, хранение однородных атрибутов, хранение файлов, хранение "расширенных" атрибутов, простейший ORM, рассказано про оптимизацию запросов.

Автор ограничивается стандартом SQL. Поэтому, например, типы данных для массива и hstore - плоский хеш для PostgreSQL, которые позволяют решать часть проблем, но в стандарте отсутствуют, им в качестве решений не упоминаются. А зря - хранить несколько однородных атрибутов, например телефонов, в массиве удобнее, чем в классической "правильной" реляционной схеме, а хеш гарантирует уникальность строкового атрибута и позволяет вешать внешний ключ - что тоже избавляет от недостатков хранения всех атрибутов в одной таблице.

[identity profile] u-uka.livejournal.com 2010-12-18 09:29 pm (UTC)(link)
(*бурчит*) Там микроскоп должен был быть на заднем плане...

А почему не надо файлы в базе хранить? У нас на работе такой холивар на эту тему... Я в стане противников, но из неоспоримых аргументов у меня только размер базы. А молодое поколение программеров уже кажись убедили в том, что size doesn't matter :(

[identity profile] beldmit.livejournal.com 2010-12-18 09:33 pm (UTC)(link)
В качестве аргументов за хранение - транзакционность. В качестве аргументов против - то, что на файловой системе с ними оперировать проще. И размер, да. И независимость хранения.

[identity profile] shamanov.livejournal.com 2010-12-19 12:19 am (UTC)(link)
Аргументов против:
1. Файлы в БД не поддаются (ну по крайней мере еще 3-4 года назад не поддавались) любой массовой обработки типа натравливания поисковика, антивируса и прочего.
2. Неудобство массовых операций с файлами (тут вопрос размера транзакции, если файлы большие). Это операции типа check in
Аргумент за:
1. Удобно делать конкретную функцию и не надо заморачиваться настройкой дополнительных интерфейсов и доступов при работе системы.
2. Возможность интеграции системы управления правами непосредственно в БД.
3. Возможность настройки связей между файлами дополнительной. Правда есть куча систем типа svn, которые реализуют большинство необходимых дополнительных связей и группировок.
===============
На выходе получается: если храним файлы ради одной функции и интересно самостоятельное управление правами доступа, то можно и в БД (правда безо всяких антивирусов и прочего), а иначе точно не в БД.
Ну и на тему размера :) Размер имеет значение - особенно как требование к серверу БД.

[identity profile] ask-ripe.livejournal.com 2010-12-19 04:58 am (UTC)(link)
Дима,

но есть же bfile?

[identity profile] beldmit.livejournal.com 2010-12-19 08:37 am (UTC)(link)
Это что за зверь?

[identity profile] ask-ripe.livejournal.com 2010-12-19 09:13 am (UTC)(link)
эээ - это тот самый велосипед, который вы изобретали в кмв...
http://download.oracle.com/docs/cd/B10501_01/appdev.920/a96591/adl12bfl.htm#99013
появился в 2001 году в 9i

гугл в помощь (осмысленные линки на русском (если вдруг tahiti не перевариваешь))
http://my-oracle.it-blogs.com.ua/post-31.aspx
http://my-oracle.it-blogs.com.ua/post-30.aspx
http://my-oracle.it-blogs.com.ua/post-61.aspx

[identity profile] beldmit.livejournal.com 2010-12-19 09:21 am (UTC)(link)
Понял
ext_613079: Default userpic (Default)

[identity profile] shaplov.livejournal.com 2010-12-18 10:12 pm (UTC)(link)
Одно дело сказал апачу отдать статический файл, и уйти, а другое через скрипт этот файл перелопачивать, получая его из базы и отдавая апачу...

[identity profile] alexkuklin.livejournal.com 2010-12-18 11:04 pm (UTC)(link)
Лучше не апачу, а nginx-у :)
http://wiki.nginx.org/XSendfile

[identity profile] dph.livejournal.com 2010-12-18 11:05 pm (UTC)(link)
Собственно, это единственный аргумент против хранения файлов в БД - у всех веб-серверов есть способы быстро и в потоке отдавать файлы наружу, а вот из БД - сложно и дорого.

Вот сделают возможность ссылки на блоб, как на линуксовый файл - и вообще будет счастье )

[identity profile] ask-ripe.livejournal.com 2010-12-19 09:14 am (UTC)(link)
Дим - вот конкретно это и есть bfile :)

[identity profile] tarkhil.livejournal.com 2010-12-18 09:40 pm (UTC)(link)
Интересно бы почитать

[identity profile] beldmit.livejournal.com 2010-12-18 09:42 pm (UTC)(link)
Могу pdf кинуть куда-нибудь.

[identity profile] tarkhil.livejournal.com 2010-12-18 09:43 pm (UTC)(link)
tarkhil@over.ru, вестимо

а нестандартные расширения SQL автор правильно не рассматривает)

[identity profile] beldmit.livejournal.com 2010-12-18 09:47 pm (UTC)(link)
Ушло.

А почему, собственно, не рассмотреть? Особенно если к базе ты привязан. То есть в общей книге да, не надо.

[identity profile] dimas.livejournal.com 2010-12-18 10:37 pm (UTC)(link)
Димк, а кинь мне? :)

[identity profile] beldmit.livejournal.com 2010-12-18 10:48 pm (UTC)(link)
Там этажом выше ссылка :-)

[identity profile] dimas.livejournal.com 2010-12-18 10:51 pm (UTC)(link)
тогда уж ниже :) но либо я чего не понимаю, но я не вижу ссылки где скачать :) регистрации нету …

[identity profile] dimas.livejournal.com 2010-12-19 03:53 pm (UTC)(link)
ага, спасибо, получил

[identity profile] besm6.livejournal.com 2010-12-19 09:14 am (UTC)(link)
И мне тоже кинь.

[identity profile] beldmit.livejournal.com 2010-12-19 09:20 am (UTC)(link)
Ушло.
arilou: (Default)

[personal profile] arilou 2011-07-28 10:24 pm (UTC)(link)
Кинь и мне, пожалуйста.

[identity profile] raccoon.livejournal.com 2010-12-18 10:32 pm (UTC)(link)
Есть еще здесь, в свободном доступе.

[identity profile] ask-ripe.livejournal.com 2010-12-19 09:17 am (UTC)(link)
там не совсем свободный доступ - некоторые книги можно прочитать только имея активную регистрацию(30$/год)

[identity profile] alexott.livejournal.com 2010-12-19 11:24 am (UTC)(link)
library дот nu (бывший гигапедия) - всех спасет :-)

2b || !2b

[identity profile] pingback-bot.livejournal.com 2010-12-19 08:56 am (UTC)(link)
User [livejournal.com profile] b00ter referenced to your post from 2b || !2b (http://b00ter.livejournal.com/183399.html) saying: [...] По поводу хранить или не хранить файлы в базе [...]

[identity profile] kaatula.livejournal.com 2010-12-19 07:36 pm (UTC)(link)
Вот тут товарищ, выглядящий неглупым
http://www.msteched.com/2010/NorthAmerica/DAT316
сильно эту практику ругает. Начиная с 36ой минуты.

Я лично тоже как-то не люблю и не делаю. Файловые репозитории это наше всё ;)

[identity profile] beldmit.livejournal.com 2010-12-19 08:06 pm (UTC)(link)
Которую практику? Мне очень лениво видео смотреть.

[identity profile] kaatula.livejournal.com 2010-12-19 10:41 pm (UTC)(link)
Ругает практику хранить файлы в базе.

Выступает за хранение файлов на NFS, и пускай админы это прекрасно админят.

А видео зря, видео - эт наше всё )