Pull to refresh
32
0
Евгений Бредня @bzq

IT

Send message
О, наконец-то появилось что-то интересное в комментариях.

Да, в восьмой задаче в таблице было 10000 записей. Подсчёт «в лоб» слишком долгий. А предварительный расчёт сумм и произведений пар (или WITH, или временной таблицей) даёт приемлемый результат. Догадаться до такой оптимизации не так уж сложно, но нужно догадаться, что оптимизация вообще нужна. Скажем, для студентов это совсем нетривиально. Опять же блиц и стресс.

Но в девятой задаче это уже не проходит и там уже нужна хорошая алгоритмическая оптимизация. Вот предложенный Вами метод действительно работает! У нас было 5000 записей в таблице. Вот наше решение:
Осторожно, решение задачи!
select sum(x*x)
  from (select count(*) x
        from vpoupkine.abacus t1
           , vpoupkine.abacus t2
     	group by t1.n + t2.n)


Спасибо за добрый отзыв!
Надо было из бэкапа восстанавливаться, это работает и надёжно. И бэкап в такой ситуации точно не помешает.

Мне по-прежнему все эти жалобы на эппл кажутся какими-то придирками, извините, ничего личного. Как-то так:

Google search: миграция данных windows проблема
About 6,320,000 results (0.79 seconds)

Google search: миграция данных mac проблема
About 172,000 results (0.53 seconds)

И это с учётом, что капризные маководы под переносом ожидают на новом маке все программы с настройками, пароли и прочие плюшки, а не только свои файлы данных. А что там переносят виндоводы, которые будут минимум будут ставить и настраивать весь софт, я вообще не понимаю. Всегда на отдельный том свои файлики собирал…
Забэкапить пользовательские данные через VSS тоже не является проблемой

Теоретически да, а на практике почему-то нет. У меня есть домашний мак и рабочая винда с настроенными штатными бэкапами. И с маком всегда всё хорошо, а у винды постоянно что-то случается. И не надо думать, что я как-то криворук к винде, я заинтересованное лицо в том, чтобы все мои бэкапы работали как часы, чего и добивался. В результате преходится винду время от времени чуть ли не вручную бэкапить, чтобы точно копия была. Бекап-сервер — мелкая каропка с дисками на платформе ARM с линуксом внутри.

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

И, да, ТМ — действительно скорее для пользовательских данных. Но если с операционкой вдруг что-то случится, то её не составляет труда поставить заново и восстановить все пользовательские данные и все программы из бэкапа ТМ. То есть после восстановления прдолжите работу с того же места, на котором был сделан бэкап. И макОС сам не ломается, это же юникс.
О, тег сарказм не увидели и заминусовали.

Я вот не понимаю, за что огульно мак обвиняют? В потрохах это очень неплохо укомплектованный прямо из коробки юникс. Открываешь консоль и почти всё необходимое имеется под руками. Все работающие процессы можно смотреть штатными способами. Работает man. Поведение, описанное в статье, присутствует в документации. Чего тут неявного-то? Лично из Эппла должны были позвонить и предупредить? Где в статье про неявное поведение? Неожиданное для ТС — да.

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

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

Я вот считаю, что TM — одно из неоспоримых преимуществ мака, когда за пару кликов можно настроить резервное копирование для дома, для семьи. Без заморочек, технически красиво реализованное и просто работающее. А вот попытки делать дома бэкапы венды — это всегда приключение, то не завелось, то не сработало, то завелось и отработало, только файлы не достать.
Ну нет, не годится. Даже мне, человеку довольно далёкому от оптимизации, ясно, что время работы будет зависеть много от чего, включая заполненность кэшей базы и особенности физического распределения данных по дискам (читай: от погоды на луне). То есть объективно сравнить два решения будет совершенно невозможно. Обычно оптимизацию хоть как-то меряют по количеству логических чтений. Это раз. А во-вторых, с точки зрения олимпиады, это уже не задача на SQL получается, а оптимизация работы некоей IT-системы.

Плюс, вопросы оптимизации они такие, мягко говоря не совсем простые по критериям. Обычно оптимизация ведётся до приемлемого уровня, планка которого для каждого конкретного случая выставляется в определённую конкретную величину, которую можно померять.

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

Вобщем тема оптимизации несомненно интересна и очень востребована, но олимпиада была по SQL. Как в SQL дать задачу на производительность мы придумали, см. задачи 8 и 9 финала. А аналитические хранилищи оптимизировать, это наверное не на олимпиаде, а на производстве с 09 до 18.
Парсер — это в калькуляторе? Специально так подбирали условие, чтобы от парсера там был один подзапрос с регулярным выражением. Не думаю, что это было проблемой хоть для кого-то, кто взялся за решение задачи.

А вот как Вы себе представляете задачу по ускорению аналитического запроса? Я без всяких шуток интересуюсь. Просто для меня миграция данных — это как взял лопату и «бери больше, кидай дальше», никаких сложностей сплошная рутина. Что тут оценивать-то?
Специфика есть, но она не особо существенная. Например, используются словарные объекты оракловой базы для получения информации типа DBA_TABLES, DBA_TAB_COLUMNS, DBA_DEPENDENCIES. В PostgreSQL должны быть свои аналогичные словарные таблицы. Оптимизация в оракловой базе явно отличается от других. И так далее. Но на другую базу переносимо. Другой вопрос в том, нужно ли это переносить на другую базу.
Анонсировать не могу. Сегодня мне уже на пальцах показали, что с таким только в корпоративных блогах можно, чуть учётку не заблокировали. Но Вы сами почитайте про олимпиаду. В этом году кто-то другой SQL готовит, но я вижу, что даже мою текстовку с правилами не поменяли, только даты другие.
А Вы не скромничайте и попробуйте сами. Это не так сложно, как кажется. Самое сложное, что там есть — это не совсем традиционное использование рекурсии. И уж точно тут нет никакой олимпиадной специфики. Подобные задачки время от времени рассматривают на sql.ru, посмотрите там на примеры разбора.
За конструктивный подход спасибо, так можно и подискутировать. Хотя я несколько опасаюсь Вашего «категорического несогласия» (цитата). Зачем же категорично так?

Английская Википедия тоже называет SQL специализированным языком
(DSL), используемым в программировании. По английски просто писать, что query language является ещё каким-то language — это толочь воду в ступе, название самоопредеяющее.

На самом деле порывшись в Википедии я так понимаю, что Вы различаете компьютерные языки и в них подкласс языков программирования, а я все компьютерные языки называю ЯП. Если честно, не знаю насколько это сложившаяся терминология, даже несморя на профильное образование и десятилетия работы в области ИТ.

В моём представлении компьютерным языком можно назвать вообще что угодно, связанное с языком и компьютером. Например то, что мне какая-то работающая на компьютере программа покажет на экране. Текстовый вывод любой программы, особенно если он человеко-подобный (типа введите число) можно назвать компьютерным языком. Или все эти текстовые протоколы, на которых общаются сами программы (http, smtp и прочее). Сюда же, кстати, SQL вписывается. Короче слишком общо, мне не нравится. Хотя да, языки разметки в ЯП записывать тоже не совсем корректно. С третьей стороны на том же XML есть XSLT и это уже ЯП в самом что ни на есть программистском понимании. Да и на CSS порой такой интерактив делают, что ой. Так что по крайней мере не всё так однозначно.

И ещё хочу пару слов в защиту Википедии сказать. Почему-то её принято походу пинать, что она не является авторитетом. Почему ж не является? Ещё как является. Истиной в последней инстанции не является, а энциклопедическим изданием является и весьма неплохим. В Hitchhikers Guide to the Galaxy ляпов куда как больше.
А надо? Если делать разбор задачи, то нужно по статье на каждую. Просто опубликовать ответы, на мой вкус, неинтересно, их никто тогда не будет и пробовать решать. Ну и я не вижу никакой запредельной сложности в этих задачах.
Не совсем согласен с Вами.

Если честно, то для меня язык программирования (ЯП) — это всё, на чём человек может объяснить компьютеру, что тот должен делать. Так что, IMNSHO, SQL — это несомненно язык программирования. Специализированный. И Википедия тоже со мной согласна. Да, если бы язык имел устоявшееся название СЯЗ (Структурированный язык запросов), то с точки зрения русского языка его бы чаще называли языком запросов, как это и происходит в английском. А так, все формальные языки, придуманные для программирования ЭВМ, вполне корректно называть ЯП.

PL/SQL это как бы не SQL с дополнениями ЯП, а совершенно самостоятельный язык программирования с встроенной возможностью использовать в нём SQL. Тоже, кстати, довольно специализированный. Возможно, название было взято по аналогии с PL/I, который был популярен во время появления на рынке PL/SQL, хотя корнями PL/SQL ближе к ADA.

У меня просьба к коментаторам: если Вам кажется, что в тексте ошибка, то лучше в личные сообщения.
Дело не в любви к теории заговоров, а в чрезмерной агрессивности яндексных сервисов в сочетании с известными фактами о невидимом стуке. Я вот тоже регулярно смотрю на что-то яндексное из приложений и так же регулярно сношу, так как лезет яндекс в мою личную жизнь через мобильные приложения куда как наглее, чем я готов стерпеть. Nothing personal, как говорится.
Добавил дополнительные материалы по теме, которые не попали в статью.
Ничего, Воронеж справится. Вот Вам хорошо. Хозяев Алиса слушает внимательно, а у меня забывает всё напрочь. Реакция на предыдущую фразу у меня бывает только если повторяю Ваши примеры. А у меня только так:


И ещё странно, что Алиса всё норовит в поиск послать. Пусть бы сама искала и озвучивала. Если не может от своего имени, то пусть отвечает типа «В этих ваших интернетах говорят ...»
Когда Алиса появилась впервые, её зачем-то назвали ИИ. Было конечно интересно. Первое, что я сделал — проверил её на интеллект нехитрым тестом:
Я: Дважды два.
А: Четыре.
Я: Прибавь два.
А несёт какой-то бред.

Суть теста такая, что любая интеллектуальная деятельность должна иметь контекст и память того, что было только что. У Алисы этого нет. В этой статье с интересом увидел, что оказывается есть, причём, если верить статье, используется повсеместно, вроде как любое произнесённое заполняет информацию в некоторой виртуальной «форме». И ещё эта, как её, анафора. Со второй попытки я сумел повторить пример с Эверестом из статьи, в первый раз моя фраза распозналась не совсем верно, и оно не сработало. Тогда я попробовал вызвать подобное поведение ещё хоть где-то. Не могу. Не выходит:
Я: Погода на завтра.
А: Завтра в Москве…
Я: А в Воронеже?
А: А ты где живёшь?

Короче, пока Алиса постоянно забывает нить разговора и не помнит даже предыдущей моей фразы, она в лучшем случае похожа на дауна. Человек, который не помнит предыдущей фразы ни своей, ни собеседника в реальной жизни производит пугающее впечатление.

Я думаю, что нужно сделать так, чтобы Алиса как раз всё-всё помнила и отвечала на вопросы только в контектсе предыдущих реплик. Пусть они забываются со временем (через несколько часов), пусть сбрасываются на специальные фразы типа «Так, давай всё с начала», но контекст забывать нельзя.

А болталка — прикольно, но совершенно бесполезно.
Да, так тоже можно, но мне не очень нравится. Потому что в итоге получится:
image

Information

Rating
9,937-th
Location
Москва, Москва и Московская обл., Россия
Works in
Date of birth
Registered
Activity