Как стать автором
Обновить
3.79

MySQL *

Свободная реляционная СУБД

Сначала показывать
Порог рейтинга
Уровень сложности

ORM для реальных приложений не окупается

Время на прочтение4 мин
Количество просмотров30K


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


Проблемы


  1. При использовании ORM мы обычно прописываем в коде сущности и их взаимосвязи, и по сути это — проектирование БД ещё раз (дублирование логики!) прямо в коде.
  2. Борьба с проблемами производительности никуда не денется всё равно, как ни абстрагируй. Ты просто не можешь не знать, что у тебя под капотом происходит. Какие там делаются джойны и группировки.
  3. Язык запросов в виде цепочки объектов и методов читается хуже, чем SQL, по сути это — особый язык, который надо учить. За себя скажу, что когда писал на PHP (Laravel), длинные запросы на Eloquent меня иногда изумляли своей сложностью чтения:
Читать дальше →
Всего голосов 84: ↑57 и ↓27+30
Комментарии231

Новости

Погружаемся в базы данных и SQL: полезные материалы и инструменты от сотрудников Selectel

Время на прочтение4 мин
Количество просмотров10K

Почему программисты SQL так плохо шутят? Потому что их юмор — это всегда "SELECT * FROM jokes WHERE is_funny = 1".

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

Мы попросили наших коллег порекомендовать полезные ресурсы, которые помогут сделать первые шаги в работе с базами данных и SQL. Сохраняйте подборку в закладки, чтобы сэкономить время на изучение темы, и делитесь своими вариантами в комментариях.
Читать дальше →
Всего голосов 44: ↑42 и ↓2+40
Комментарии3

Подойдет ли PostgreSQL вообще всем проектам или нужны альтернативы

Время на прочтение15 мин
Количество просмотров16K

В интернете только и разговоров, что про PostgreSQL и MySQL, но выбор СУБД много шире. В этом материале мы рассмотрим несколько популярных баз данных, разберемся с их спецификацией и сценариями использования, чтобы выйти за рамки привычных решений.
Читать дальше →
Всего голосов 46: ↑41 и ↓5+36
Комментарии54

Кто мощнее в базах данных? Сравниваем производительность БД на серверах с ARM- и x86-процессорами

Уровень сложностиСредний
Время на прочтение15 мин
Количество просмотров14K

Всем привет! Ранее я разобрал и протестировал сервер с процессором ARM, который попал к нам в Selectel Lab. Сервер показал хорошие результаты по производительности в ряде классических тестов, но в этот раз захотелось проверить его в боевой задаче — в работе с базами данных. Быть может, архитектура ARM-процессора сделает всех конкурентов на этой территории?

Чтобы ответить на этот вопрос, протестировал ARM вместе с семеркой серверов разных конфигураций с процессорами Intel и AMD. В качестве баз данных для нашего эксперимента выбрал самые популярные — PostgreSQL и MySQL. Результаты тестов с графиками и комментариями — под катом. Надеюсь, они будут полезны вам при выборе сервера под БД.
Читать дальше →
Всего голосов 59: ↑57 и ↓2+55
Комментарии45

Истории

Полезные TreeMap визуализации для MSSQL, Postgres и MySQL

Уровень сложностиСредний
Время на прочтение3 мин
Количество просмотров9.3K

Я очень люблю визуализации. Человек лучше всего воспринимает информацию через образы. Для трех часто встречающихся баз (MSSQL, Postgres и MySQL) я смастерил плагины к проекту Bell, хотя этот код на Python можно использовать и отдельно. Поэтому для каждой визуализации я буду в скобочках писать имя файла из репозитория GitHub - вы можете этот файл вытащить и использовать его отдельно от проекта (для этого нудны минимальные модификации).

Отмечу только, что я считаю себя экспертом только в MSSQL, а то что сделал с другими базами - сделал по наитию. Кроме того, в отличие от MSSQL у меня нет реальных баз под большой нагрузкой для Postgres и MySQL. Поэтому ошибки/пожелания для скриптов Postgres и MySQL очень и очень welcome!

В основном я задействовал TreeMap.

Читать далее
Всего голосов 29: ↑29 и ↓0+29
Комментарии12

6 книг по MySQL для старта работы и погружения в технологию

Время на прочтение4 мин
Количество просмотров14K

MySQL — реляционная СУБД, использующая декларативный язык программирования SQL. Она предлагает все необходимые возможности для создания баз данных и написания серверных приложений.

В нашей подборке — 6 книг по MySQL, которые будут полезны как на старте, так и для развития навыков. Рекомендуйте свои книги в комментариях!
Читать дальше →
Всего голосов 57: ↑46 и ↓11+35
Комментарии20

Не все типы репликации одинаково полезны, или почему две MySQL лучше одной

Время на прочтение5 мин
Количество просмотров6.3K

В это сложно поверить, но MySQL как продукт появился еще в 1995 году. Со временем название СУБД стало таким же нарицательным, как Xerox. Сегодня под этим термином могут понимать самые разные связки: от MySQL Native от компании Oracle до Percona XtraDB Cluster, а ведь есть еще MariaDB, Galera, Percona Server.

О том, как устроено генеалогическое древо MySQL можно снимать сериал с драконами, поэтому в материале мы сконцентрируемся на особенностях и ограничениях работы СУБД с разным типом репликации: MySQL sync и MySQL Semi-sync.
Читать дальше →
Всего голосов 48: ↑45 и ↓3+42
Комментарии4

MySQL. Оптимизация псевдо-больших данных

Время на прочтение7 мин
Количество просмотров6.3K

Работая над различными интересными задачами, мне только и приходилось слышать о существовании программ, которые работают с большими данными (в области действия одного сервера). И вот настал тот день, когда к нам обратился клиент, у которого сайт грузился очень долго. Задание для решения этой проблемы выдали моего коллеги. Немного прошло времени, до того как он подозвал меня к себе, с целью показать, столь диковинное для меня зрелище, связанное с объёмом таблиц, в которых находились данные после импорта категорий, характеристик, брендов товаров.

22 миллиона варианта категорий для нас показалось более чем приличным объёмом, тем более — вес таблицы с категориями получился чуть больше 1,6 Гиб. С такими размерами страницы начали грузиться дольше, чем хотелось бы. Ввиду того что, сроки на решение проблемы маленькие (чем быстрей тем лучше), руководство решило выделить на эту задачу, две единицы программистов, меня и моего коллегу. Разделив модуль на двоих, мне достались по объёму не самые сливки, но не менее ответственный участок, поскольку в нём — на загрузку данных, уходило значительное время.
Читать дальше →
Всего голосов 44: ↑40 и ↓4+36
Комментарии7

Как рисовать с помощью SQL?

Время на прочтение4 мин
Количество просмотров27K

Видимо я сделала какое-то очень плохое зло, поэтому живу во время перемен. Справиться с эмоциями и повысить конкурентоспособность на рынке Data Enigneer’ов мне помогает сайт Hackerrank. На пути к решению вообще всех задач по SQL с этого сайта мне попалась задачка на нетривиальные запросы.

В задачке требовалось звёздочками нарисовать прямоугольный треугольник...

Порисуем с помощью SQL
Всего голосов 66: ↑62 и ↓4+58
Комментарии30

7 распространенных ошибок в SQL-запросах, которые делал каждый (почти)

Время на прочтение6 мин
Количество просмотров85K

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

Однако работая с большим количеством junior-ов, мы раз от раза находим в их решениях одни и те же ошибки. Реально — иногда просто создается ощущение, что они копируют друг у друга код. 

Кстати, иногда такая же участь постигает и специалистов более высокого полета. 

Сегодня мы решили собрать 7 таких ошибок в одном месте, чтобы как можно меньше людей их совершали.

Читать далее
Всего голосов 44: ↑38 и ↓6+32
Комментарии92

Как не надо индексировать

Время на прочтение5 мин
Количество просмотров37K

Развитие происходит по спирали: когда-то люди не умели правильно индексировать, потом (в основном) научились, потом пришли noSQL и все снова забыли знание древних. Что вы будете делать, когда последние из старых DBA отплывут в Валинор?

Снова и снова и сталкиваюсь с полным набором антипаттернов индексирования. Я их перечислю, но! Для каждого антипаттерна есть исключение, когда именно это и стоит делать. Поэтому кликбейтно сформулированное правило верно в 95% случаях, но если вы хотите копнуть глубже, то прочитайте про исключения.

И в конце полезные скрипты для MSSQL, Postgres и MySQL.

Читать далее
Всего голосов 44: ↑44 и ↓0+44
Комментарии25

NoSQL и Антивакцинаторство

Время на прочтение5 мин
Количество просмотров8.3K

Говорят, что вакцины стали жертвами собственной эффективности. Будто если бы мы видели, как странновато одетый кучер раз в неделю забирал бы трупы нескольких соседей, умерших, как и десятки до них, довольно неприятной смертью, может, и вакцинировались бы охотнее.

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

С середины прошлого века мы работаем над реляционными базами данных. И они прекрасны. Но сейчас все чаще любят использовать NoSQL всех видов и мастей. И они иногда неплохо ложатся и затыкают собой какое-то мелкое место в проекте. Если я ценю свои данные и мне нужна какая-то надежность, то мне нужны ACID гарантии. Если это всего лишь кеш, данные из которого нужны чтобы ускорить приложение то я с радостью возьму Redis или аналоги. Ведь если он упадет или данные рассогласуются я смогу их восстановить из нормальной базы.

Читать далее
Всего голосов 56: ↑48 и ↓8+40
Комментарии44

Педальку в пол, или как ещё ускорить CPU-bound приложение?

Время на прочтение29 мин
Количество просмотров6.2K

Зачем я это читаю?


TL;DR:


  • Переложив секции кода и данных программы на большие страницы можно существенно ускорить приложение (у нас получилось до +10%) не трогая исходный код.
  • Можно быстро проверить ничего не перекомпилируя, детали здесь.
  • Финальное решение оперирует "классическими" большими страницами (не transparent huge pages), поэтому в какой-то степени его можно назвать дальнейшим развитием libhugetlbfs.
Читать дальше →
Всего голосов 36: ↑35 и ↓1+34
Комментарии2

Ближайшие события

Go и MySQL: настраиваем пул соединений

Время на прочтение14 мин
Количество просмотров25K

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

немного затронем основы клиент-серверного протокола MySQL, его базовое устройство и принципы работы;

дальше перейдем к Go части и разберем реализацию пула соединений;

будем двигаться от конфигурирования соединений к выполнению запросов, параллельно заглядывая в код драйвера.

Надеюсь каждый для себя найдет что-то полезное.

Поехали
Всего голосов 44: ↑43 и ↓1+42
Комментарии13

Дифференциальные и инкрементальные бэкапы MySQL

Время на прочтение7 мин
Количество просмотров15K

Для MySQL существует широко известный инструмент по созданию резервных копий баз данных — mysqldump, который создаёт дамп посредством записи серии SQL-инструкций для восстановления таблиц и данных целевой базы данных.

Он неплохо подходит для резервного копирования небольших баз данных, но когда база данных набирает приличный «вес» и возникает необходимость резервного копирования чаще, чем раз в сутки, скорость создания и размеры дампов могут стать проблемой. В данном случае на помощь приходят утилиты, создающие копию бинарных файлов баз данных, например, такие как Percona XtraBackup.
Читать дальше →
Всего голосов 30: ↑30 и ↓0+30
Комментарии8

MySQL в Docker не может писать slow-логи в /dev/stderr

Время на прочтение8 мин
Количество просмотров7.8K

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

Сначала краткая предыстория. Я пытался сделать так, чтобы логи медленных запросов в MySQL писались в /dev/stderr и их можно было бы читать с помощью простого docker-compose logs -f mysql без необходимости входить в контейнер с docker-compose exec mysql ash.

Читать далее
Всего голосов 39: ↑35 и ↓4+31
Комментарии7

Как новость про +4 выходных дня уронила нам базу данных

Время на прочтение6 мин
Количество просмотров48K
Этот день — яркий пример того, как несколько вещей, которые сами по себе не приводят к отказу, могут удачно совпасть. Итак, 23 апреля было совершенно обычным днём, с обычным трафиком и обычной загрузкой ресурсов. Как обычно, с запасом больше трети, чтобы при потере любого из ЦОДов пережить это без проблем. Никто не думал, что к серверному мониторингу нужно прикручивать ещё мониторинг того, что говорит президент на прямой линии, поэтому дальше случилось вот что:



Примерно в 13:30 у нас резко подскочила нагрузка на поиск по авиации и по железнодорожным билетам. Где-то в этот момент РЖД сообщила о перебоях на сайте и в приложении, а мы начали экстренно наливать дополнительные инстансы бекендов во всех ЦОДах.

Но на самом деле проблемы начались раньше. Примерно в 8 утра мониторинг прислал алерт про то, что на одной из реплик базы данных у нас что-то подозрительно много долгоживущих процессов. Но мы это прошляпили, сочли не очень важным.
Читать дальше →
Всего голосов 111: ↑107 и ↓4+103
Комментарии53

Как использовать ClickHouse не по его прямому назначению

Время на прочтение10 мин
Количество просмотров19K

Алексей Миловидов делает ClickHouse и, конечно, знает его вдоль и поперек. В том числе и о том, как его можно использовать дополнительно к его штатным и всем хорошо известным функциям.

И сегодня расскажет про эти необычные способы его использования и, может быть, даже не для хранения и обработки данных.

Read more
Всего голосов 47: ↑47 и ↓0+47
Комментарии5

«Ваша устаревшая база данных перерастает сама себя». Опыт chess.com

Время на прочтение14 мин
Количество просмотров9.7K

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

База данных становится слишком большой или старой? Ее тяжело обслуживать? Что ж, надеюсь, я смогу немного помочь. Текст, который вы собираетесь прочитать, содержит реальный опыт масштабирования монолитной базы данных, лежащей в основе одного из сайтов Топ-250 (согласно alexa.com). На момент написания этой статьи chess.com занимал 215 место в мире по популярности. Ежедневно к нам заглядывали более 4 млн уникальных пользователей, а наши MySQL-базы обрабатывали в общей сложности более 7 млрд запросов. Год назад сайт ежедневно посещали 1 млн уникальных пользователей; в марте прошлого года их число увеличилось до 1,3 млн; сегодня более 4 млн человек заходят на chess.com ежедневно, а число сыгранных партий превышает 8 млн. Я, конечно, знаю, что это не сопоставимо с самыми крупными игроками на рынке, однако наш опыт все же может помочь в такой сложной задаче, как «исправление» монолитной базы данных и ее вывод на новый уровень производительности.

Читать далее
Всего голосов 43: ↑42 и ↓1+41
Комментарии3

MySQL: казнить нельзя помиловать

Время на прочтение9 мин
Количество просмотров18K


Сайт и интернет-магазин «Эльдорадо» — это около 40 тысяч покупок ежедневно. Объяснять, что это значит для бизнеса компании, наверное, не надо.

Исторически магазин работает на движке Bitrix с огромным количеством кастомного кода и дополнений. В качестве хранилища выступает кластер MySQL с четырьмя мастер-серверами.

Монолитные приложения есть у значительного числа компаний, и работать с ними приходится очень многим. Способов борьбы с монолитом предостаточно, вот только про удачные, к сожалению, пишут мало. Надеюсь, что рассказ о том, как мы подпираем наш монолит (пока его не распилили) будет вам интересен.
Читать дальше →
Всего голосов 68: ↑67 и ↓1+66
Комментарии53
1
23 ...

Вклад авторов