Записки программиста, обо всем и ни о чем. Но, наверное, больше профессионального.

2007-03-08

ms sql server 2000 + blob

Хочу поделиться результатами личного опыта борьбы с BLOB данными в базе данных под MS SQL Server 2000 sp4.

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

Берем в одну руку ADO от мелкихпрограммеров, в другую БД с полем типа image, в третью любой скриптовый язык, для манипуляций обьектами ADO. И пользуясь методом ADO AppendChunk для нашего поля, пытаемся загрузить в БД файлы разного размера.

В моем случае облом произошел на уровне 150 - 160 мегабайт. Памяти, говорит, не хватает. Это при том, что то море памяти, которое выделено СУБД даже не все использовано. Полез в гугель. Нашел. Ответ такой - для загрузки через сеть (сетевые протоколы) требуется непрерывный участок оперативки под загружаемый обьект. Теперь все понятно. Поскольку фрагментацией оперативки управлять невозможно, заранее неизвестно, при каком размере файла случится облом. А что самое интересно, нет возможности грузить частями. Все. Финиш. ADO использвать нельзя.

Совершенно спокойно файлы любого размера (я грузил 300 с лихуем мегабайт) грузятся путем написания хранимой процедуры, использующей набор конструкций:
select @ptr=textptr([blob]) from tabblob where id=@id
updatetext tabblob.[blob] @ptr NULL 0 @binaryout

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

Надо будет посмотреть, как ADO с ORACLE дружит при блобных операциях.

Комментариев нет:

Отправить комментарий

Архив блога

Ярлыки

linux (241) python (191) citation (186) web-develop (170) gov.ru (159) video (124) бытовуха (115) sysadm (100) GIS (97) Zope(Plone) (88) бурчалки (84) Book (83) programming (82) грабли (77) Fun (76) development (73) windsurfing (72) Microsoft (64) hiload (62) internet provider (57) opensource (57) security (57) опыт (55) movie (52) Wisdom (51) ML (47) driving (45) hardware (45) language (45) money (42) JS (41) curse (40) bigdata (39) DBMS (38) ArcGIS (34) history (31) PDA (30) howto (30) holyday (29) Google (27) Oracle (27) tourism (27) virtbox (27) health (26) vacation (24) AI (23) Autodesk (23) SQL (23) humor (23) Java (22) knowledge (22) translate (20) CSS (19) cheatsheet (19) hack (19) Apache (16) Manager (15) web-browser (15) Никонов (15) Klaipeda (14) functional programming (14) happiness (14) music (14) todo (14) PHP (13) course (13) scala (13) weapon (13) HTTP. Apache (12) SSH (12) frameworks (12) hero (12) im (12) settings (12) HTML (11) SciTE (11) USA (11) crypto (11) game (11) map (11) HTTPD (9) ODF (9) Photo (9) купи/продай (9) benchmark (8) documentation (8) 3D (7) CS (7) DNS (7) NoSQL (7) cloud (7) django (7) gun (7) matroska (7) telephony (7) Microsoft Office (6) VCS (6) bluetooth (6) pidgin (6) proxy (6) Donald Knuth (5) ETL (5) NVIDIA (5) Palanga (5) REST (5) bash (5) flash (5) keyboard (5) price (5) samba (5) CGI (4) LISP (4) RoR (4) cache (4) car (4) display (4) holywar (4) nginx (4) pistol (4) spark (4) xml (4) Лебедев (4) IDE (3) IE8 (3) J2EE (3) NTFS (3) RDP (3) holiday (3) mount (3) Гоблин (3) кухня (3) урюк (3) AMQP (2) ERP (2) IE7 (2) NAS (2) Naudoc (2) PDF (2) address (2) air (2) british (2) coffee (2) fitness (2) font (2) ftp (2) fuckup (2) messaging (2) notify (2) sharepoint (2) ssl/tls (2) stardict (2) tests (2) tunnel (2) udev (2) APT (1) CRUD (1) Canyonlands (1) Cyprus (1) DVDShrink (1) Jabber (1) K9Copy (1) Matlab (1) Portugal (1) VBA (1) WD My Book (1) autoit (1) bike (1) cannabis (1) chat (1) concurrent (1) dbf (1) ext4 (1) idioten (1) join (1) krusader (1) license (1) life (1) migration (1) mindmap (1) navitel (1) pneumatic weapon (1) quiz (1) regexp (1) robot (1) science (1) serialization (1) spatial (1) tie (1) vim (1) Науру (1) крысы (1) налоги (1) пианино (1)