bash.im ithappens.me zadolba.li

Базы данных

8308

Большими надеждами и малой кровью

Понадобилась нашей немаленькой конторе единая база пользователей. Собрали совещание в IT-отделе, выбрали с каждого бюро по паре штук самых умных и толковых и посадили проектировать. Начались тяжёлые трудовые будни, потому как нюансов было много, и база нужна была не простая, а с причудами и выкрутасами.

Трудятся лучшие умы над правильной базой месяц, второй; начальство всё негодует, что же так долго. И вот настаёт светлый день презентации руководству отдела этого чуда рукотворного. Через проектор на лист А1 (экран у нас, увы, появился чуть позже) выводят красивую схему объектно-ориентированной базы, в которую при желании можно запихать что угодно. Далее — минут на сорок рассказов с горящими глазами, что, для чего и почему, собственно, так долго. Начальство смотрит, слушает и выдаёт замечательную фразу, над которой мы потом несколько дней посмеивались: «А зачем вам эти кучи таблиц и связей? Хватило бы двух таблиц. В первой — ФИО и телефон, а во второй — отдел/бюро/группа. А вы тут накрутили». Посмеялись и забыли.

Отдало базу начальство на доработку, внедрение и ведение одному бюро — как раз двум из тех лучших умов. Но были у умов свои особенности: один — опытный и очень толковый, но периодически ленивый и очень пофигистичный, а второй — молодой, бойкий, но невнимательный и недостаточно опытный. Далее решило начальство, что база секретная, и надобно закрыть к ней доступ для всех разработчиков, кроме этих двух товарищей, а им поручило писать вьюшьки, пакеты и прочие радости, чтобы программисты с базой все же могли работать. Программистов у нас много, потребностей ещё больше, да и фантазия разыгралась, ибо схема позволяла. Но стали умы филонить и спихивали абы что (лентяй) или абы как сделанное (невнимательный). Получив же такие подарки, программисты шли к админу баз данных и просили его помочь.

Надоело админу, и создал он две таблички: в первой — ФИО и телефон, а во второй — отдел/бюро/группа. Связал их по кодам, загрузил данные и велел пользоваться. И вот не знаем теперь: то ли начальство было право, что хватит двух табличек (а их с трудом, но хватает), то ли неправо, что такую разработку нескольких бюро так просто из-за своего непонимания и незнания загубило.

8146

Во глубине иранских руд

У нас программист один, на котором платёжная база висит, вечно замученный ходит. Помощников нет, кроме него, никто ничего сделать не может в этой базе, поэтому ему даже в отпуске звонят по мобильному и спрашивают, что и как.

Так вот, теперь программист всегда ездит отдыхать в Иран. Спускается в пещеру на 800-метровую глубину и сидит — только там мобила не ловит.

7933

Но трогать мой хвост не моги

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

Буквально через день звонит директор: мой бывший комп, перешедший теперь во владение нового сотрудника, стал зависать при работе с БД, к которой обращаются многие. Приезжаю, чувствую ауру всеобщей подозрительности: дескать, специально подгадил перед уходом, чтобы не забывали. Сажусь, запускаю, провожу операции. Всё пучком. Недоумённо смотрю на парня. Прошу показать, что делает он. Несколько действий, абсолютно идентичных моим, — и всё замирает. О как. Вижу, что не компьютер зависает, а просто умирает мышь. Перезапускаемся — работает, пока новенький не начинает работать с той самой БД. Там мышь отрубается. А у меня — нет.

Помню, проморочился изрядно. Уже заземлять коллегу думал… Оказалось, что у мыши перетёрся проводок в месте крепления, и она коротила, когда провод изгибался вправо. При работе с БД надо было перемещать курсор на небольшое расстояние — в соседнюю ячейку. У меня, как оказалось, была привычка двигать мышь поступательно; новый же сотрудник перемещал курсор на небольшое расстояние вращением кисти, то есть поворотом мышки. Провод изгибался — и вуаля. Потом, после перезапуска, мышь перемещали к полю пароля и тем самым размыкали провода.

С тех пор всякую неисправность в компьютере я ищу по известному принципу диагностики автомобиля: от простого к сложному. Иными словами, перед тем как приниматься разбирать карбюратор и распределитель зажигания, убедись, что в баке есть бензин.

7692

WHERE bpm = 130

Открываю Query Analyzer, пишу запрос «SELECT * FROM …», втыкаю наушники, тыркаю на зелёную стрелочку Execute query и возмущаюсь:

— @#$, чё не играет?!

7685

Самые красивые дампы в мире

Архивы и бэкапы в автоматическом режиме? От лукавого всё это.

После института я устроился по специальности инженером-электроником на завод. Обслуживаю приличный участок цеха, чтоб он всегда работал в автоматическом режиме. Вся информация и управление завязаны на два сервера под Win2003, установленные на Главном Пульте. Начальство жлобится на нормальный антивирус, но это в порядке вещей («Кроме вас, к нему никто не подходит, вот вы и ставьте»). Поразил меня процесс создания архива.

Каждую ночь (работаем посменно) приходит специально обученный человек и делает архив температурных режимов. Открывает программу, вызывает график температуры заготовок и делает его скриншот, сохраняя это добро в Пейнте. Файлов таких в день — не менее тридцати. Раз в неделю начальник участка просит скинуть эти файлы ему на флешку (серваки не в сети) и отправляет их заказчику: «Режим выдержан!»

И всё бы хорошо, но скриншоты делают в BMP-формате, и полтора гига за неделю легко набирается. Сейчас на сервере только под архив занято уже более 45 ГБ. Вот я и думаю, когда система рухнет от недостатка места? На мои робкие попытки посоветовать сохранять в JPG или PNG был ответ: «Надо делать так, как учили».

Ах да: на серверах стоит база данных под SQL, куда автоматом пишутся режимы, но что их можно оттуда достать и отправить заказчику, кроме меня, боюсь, никто и не знает.

7651

Бьём в одну точку

Однажды пришлось мне настраивать SMS-уведомления сотрудникам компании о предстоящих мероприятиях. Ну, как обычно: делаю выборку телефонов и имён из БД, перебираю массив и отсылаю сообщение: «%name%, напоминаем вам, что…» Вследствие того, что у одного пользователя может быть больше одного телефонного номера, сделал ещё один перебор массива с номерами внутри массива с сотрудниками. Поставил LIMIT 1 в SQL-запросе, проверил на себе — всё работает. Убрал лимит и запустил скрипт.

Заподозрил что-то неладное, когда скрипт не закончил выполнение спустя пять минут. Сослался на тугодумность SMS-сервиса, но решил проверить лог отправки. Полез в базу и обомлел. Скрипт зациклился и отправлял сообщения только одному человеку: заместителю генерального директора. В общей сложности на её телефон пришло около двух тысяч эсемесок. Пришлось извиняться.

7420

Нам повезёт

В 2005 году я делал с товарищем курсовую: программа искала в локальной сети все расшаренные папки и загоняла список найденного в БД. Решили делать всё это на только что появившейся Visual Studio 2005 Beta 2; БД была, соотвественно, SQL Server 2005.

Новая Студия ставилась на винду не ниже XP, а в компьютерных классах царствовала 2000. Единственный комп, на котором была ХР, обладал 256 метрами памяти. Не буду описывать неимоверные тормоза, которые возникали, когда на этот компьютер заходили по RDP: в аудитории с нужным компом часто были занятия, и нас прогоняли.

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

Лаборант принял работу в таком виде при условии, что мы повысим скорость поиска, но главным препятствием был преподаватель, которому тоже было необходимо показать программу перед защитой. Тут уж никакие оправдания не помогли бы, если всё так тормозит.

Пошли на хитрость: до того, как показывать работу, сделали запрос к БД, и результаты, естественно, закешировались. При преподе я ввёл в поле поиска слова, которые якобы пришли мне в голову только что. Естественно, запрос исполнился в мгновение ока. Препод был доволен, а я молился со скрещёнными пальцами, чтобы он не попросил поискать что-нибудь ещё. К счастью, пронесло.

7401

Запели на знакомом языке

Работаю гейм-дизайнером в крупном издательстве социальных игрушек. Про свой технический бэкграунд никому обычно не рассказываю, поэтому часто сталкиваюсь с забавными ситуациями и могу сказать, что многие кодеры любят дурить нашего брата. К примеру, типичная просьба «А вы не можете сделать выборку чуть поточнее?» обычно встречается квадратными глазами, праведным гневом и рассказами про то, что это дни, недели, а иногда и месяцы работы.

Но я могу спросить и иначе: «А не добавить ли вам AND и условие в SQL-запрос, чтобы получить желаемое?» Ответа ждать приходится обычно долго: подобный вопрос действует на знатоков баз данных гипнотизирующе. Потом гордые разработчики пасуют, а общие трудозатраты по их оценке снижаются до минут, если не до секунд.

7391

Зови меня Сизифом

Работаю сисадмином, рядом со мной сидит программер. Он весь день писал базу данных, отрывался только налить чай, покурить и пообедать. Дописал, тестит — работает! Ну, думаю, отметим это маленькое событие пивком после работы. Угу… Программер ставит курсор на форму, плавно нажимает Delete и Enter.

Я никогда так сильно не переживал о психическом состоянии коллеги. Лемуры со своим выражением глаз просто нервно курили в сторонке.