36043
По всем вопросам- @workakkk @itchannels_telegram - 🔥лучшие ит-каналы @ai_machinelearning_big_data - Machine learning @pythonl - Python @pythonlbooks- python книги📚 @datascienceiot - ml книги📚 РКН: https://vk.cc/cIi9vo
💻Открытая книга «PostgreSQL 16 изнутри
⏩Эта книга для тех, кого не устраивает работа с базой данных как с черным ящиком. Если вы хотите во всем разобраться сами — книга отлично вам подойдёт.
⏩Рассматриваются такие понятия как согласованность, изоляция, буферный кеш и механизм, позволяющий восстанавливать согласованность после сбоев, — журнал предзаписи. Также устройство и использование блокировок разных уровней: легких блокировок для оперативной памяти, тяжелых блокировок для отношений, блокировок табличных строк.
📎 PDF
@sqlhub
💻Внутренности PostgreSQL: как добавить новую функцию
⏩При разработке пача для PostgreSQL иногда требуется добавить новую функцию, чтобы ее можно было вызывать из SQL.
Собственно, об этом и идёт речь в статье.
⏩Сразу можно отметить 2 момента. Во-первых, некоторые функции имеет смысл добавлять не в ядро системы, а поместить в отдельное расширение — либо стороннее, либо идущее вместе с PostgreSQL и живущее в каталоге /contrib/. Во-вторых, pg_proc.dat является удобной точкой входа для изучения внутренностей PostgreSQL. Также файл бывает полезен, когда вы примерно понимаете, какую функцию ищите, но не знаете ее название.
📎 Статья
@sqlhub
💻Большое ли преимущество использования IN вместо нескольких OR в SQL?
▶️Скажем, какой из этих 2 примеров более эффективен?
Этот:
SELECT *
FROM table
WHERE property IN ('a','b','c')
SELECT *
FROM table
WHERE property='a' OR property='b' OR property='c'
in явно выигрывает из-за компактности.postgresql строит разные планы для IN и OR:explain select * from bigtable where id = 1 or id = 3 or id=4;
QUERY PLAN
----------------------------------
Bitmap Heap Scan on bigtable (cost=13.34..25.34 rows=3 width=12)
Recheck Cond: ((id = 1) OR (id = 3) OR (id = 4))
-> BitmapOr (cost=13.34..13.34 rows=3 width=0)
-> Bitmap Index Scan on bigtable_pkey (cost=0.00..4.45 rows=1 width=0)
Index Cond: (id = 1)
-> Bitmap Index Scan on bigtable_pkey (cost=0.00..4.45 rows=1 width=0)
Index Cond: (id = 3)
-> Bitmap Index Scan on bigtable_pkey (cost=0.00..4.45 rows=1 width=0)
Index Cond: (id = 4)
explain select * from bigtable where id in (1,3,4);
QUERY PLAN
----------------------------------
Index Scan using bigtable_pkey on bigtable (cost=0.44..17.37 rows=3 width=12)
Index Cond: (id = ANY ('{1,3,4}'::integer[]))
IN был переписан в другую форму и оценён дешевле, чем несколько эквивалентных OR.IN в группу OR. Вопросы производительности необходимо рассматривать только в рамках какой-то конкретной реализации.
💻 Статический анализ структуры базы данных
Такой анализ потенциальных проблем в базе данных имеет очевидные преимущества:
⏩анализ можно проводить в любой среде (dev/test/prod) и даже на пустой БД, где нет данных (бэкап структуры без данных)
⏩затраты ресурсов зависят только от количества объектов в БД и количества проверок, а не от объема данных или качества приближения тестовых данных и запросов к реальным
⏩статический анализ может быть встроен в CI как элемент повышения качества разработки
Встраивать такого рода проверки в CI — это однозначно полезная практика. Разовая инвестиция в настройку конвейера исключит спектр потенциальных проблем с расхождением данных.
Подробнее об этом тут:
📎 Статья
@sqlhub
💻Исправление клиентской кодировки PostgreSQL с LATIN1 на UTF8
▶️Итак, реальный кейс. На сайте был один баг, который проявлялся при попытке прикрепления к сообщениям файлов, названия которых были на кириллице. В данном случае сайт выдавал ошибку 503. Это происходило несмотря на то, что кодировка базы данных была в UTF8. Тогда как Django выдавал следующее сообщение:
'latin-1' codec can't encode characters in position 55-64: ordinal not in range(256)
LATIN1. То есть следующие команды давали следующий вывод:postgres=# show server_encoding; server_encoding ----------------- LATIN1(1 row) postgres=# show client_encoding; client_encoding ----------------- LATIN1(1 row) postgres=# \encoding LATIN1
SET CLIENT_ENCODING TO 'utf8'; не давало результата, после выхода из psql кодировка возвращалась в LATIN1 .sudo apt-get install language-pack-ru
sudo update-locale LANG=ru_RU.UTF-8
sudo reboot
postgres=# show server_encoding; server_encoding ----------------- LATIN1(1 row) postgres=# show client_encoding; client_encoding ----------------- UTF8(1 row) postgres=# \encoding UTF8
💻PostgreSQL: исполнение запроса из Bash-скрипта
⏩Для выполнения запроса в PostgreSQL от имени пользователя 'postgres' используйте команду:
sudo -u postgres psql -d dbname -c "SELECT * FROM table;"
dbname — это название вашей БД, table – имя таблицы. sudo для переключения пользователя на postgres, psql является инструментом командной строки PostgreSQL, а ключ -c нужен для выполнения конкретного запроса.-t, который выводит данные построчно, и -X для того, чтобы .psqlrc не обрабатывался командой psql.
💻Коллекция готовых SQL-запросов для PostgreSQL
Нереально полезная подборка SQL-запросов, количество запросов вы и сами видите, это покрывает большую часть того, что может встретиться в практике
В том числе здесь:
⏩Обсуждаются различные функции и операторы для выполнения запросов и модификации данных
⏩Рассматриваются способы разбиения больших таблиц на N тысяч записей и распараллеливания запросов
⏩Обсуждаются особенности сравнения record и NULL и способы быстрого получения количества записей в большой таблице
⏩Рассматриваются рекурсивные запросы, модификация пользовательских данных (UPSERT) и журналирование изменений таблицы
⏩Рассматриваются модификации схемы данных (DDL) и способы добавления ограничений таблицы и изменения ограничений внешнего ключа без блокирования таблицы
📎 Коллекция
@sqlhub
💻Исследователи обнаружили, что GitHub Copilot генерирует уязвимые SQL-запросы (да и не только SQL-запросы)
⏩Не так давно исследователи компании Snyk, специализирующейся на безопасности, рассказали, что ИИ-помощник GitHub Copilot генерирует уязвимый код, если в проекте уже есть такой. Это связано с тем, что нейросеть просто анализирует кодовую базу, в том числе и плохие практики.
⏩Snyk провела эксперимент, чтобы доказать способность GitHub Copilot генерировать уязвимый код на основе такого же в проекте. На 1 этапе исследователи попросили ИИ-помощника сгенерировать SQL-запрос и получили это:
// create query to match input with the description or product name
var query = em.createQuery("SELECT p FROM Product p WHERE LOWER(p.description) like OR lower(p.productName) like :input", Product.class);
// create query to match input with the description or product name
String query = "Select * from Product where lower(description) like '%" + lowerInput + "%' OR lower(product_name) like '%" + lowerInput + "%'";
🖥 Загрузка SQL-таблиц в Pandas DataFrames позволяет анализировать и предварительно обрабатывать данные, используя богатый функционал pandas.
Чтобы загрузить таблицу SQL в pandas DataFrame, передайте соединение с базой данных, полученное от SQLAlchemy Engine, методу pandas read_sql.
@sqlhub
🖥 Jless — полезный инструмент для просмотра JSON-файлов в командной строке.
Отображение данных в удобном виде — с подсветкой синтаксиса для отдельных элементов объекта. Инструмент позволяет обрабатывать и расширять массивы.
Поддерживает полнотекстовый поиск и использование регулярных выражений.
▪Github
▪Docs
@sqlhub
🖥 Полезная шпаргалка SQL
Это руководство охватывает широкий спектр тем, начиная от основных команд SQL и заканчивая продвинутыми темами.
Материао сопровождается практичесикми примерами, которые помогут вам лучше усвоить материал.
@sqlhub
SCDB: простая Open Source БД типа «ключ — значение»
Представляем SCDB, то есть Solid-Core-Database. Этот проект еще находится на ранних стадиях разработки и задуман для решения задач и проблем разработчиков.
Что такое SCDB?
▪️scdb — легковесная, простая и скоростная подсистема хранения данных типа «ключ — значение». Сделана она по примеру архитектуры хранилища Bitcask, эффективной при операциях записи.
▪️Основной принцип проектирования scdb и Bitcask — журналируемые файловые системы. Здесь все изменения добавляются в конец журнала, а записи очень быстрые, так как выполняются последовательно. При таком построении, помимо скорости, обеспечивается целостность данных: даже в случае отказа системы они легко восстанавливаются благодаря этому методу с возможностью только добавлять.
▪️В scdb реализован процесс объединения лог-файлов. Со временем вместе с записываемыми приложением данными увеличивается и количество лог-файлов. Объединением лог-файлов предотвращается фрагментация, поддерживается производительность. Для данных это как домашняя уборка, после которой хранилище остается организованным и эффективным.
▪️Созданная для беспроблемного хранения и извлечения пар «ключ — значение», SCDB придется кстати разработчикам приложений с быстрой записью данных и простым, но надежным хранилищем.
Пример:
📌 Читать дальше
@sqlhub
🖥 Как вы решаете, какой тип базы данных использовать?
Сегодня существуют сотни и даже тысячи баз данных, таких как Oracle, MySQL, MariaDB, SQLite, PostgreSQL, Redis, ClickHouse, MongoDB, S3, Ceph и т. д. Как выбрать архитектуру для своей системы? Вкратце я могу сказать следующее:
🔹Реляционные базы данных. С их помощью можно решить практически любую задачу.
🔹In-memory СУБД это система управления базами данных, которая хранит информацию непосредственно в оперативной памяти.
🔹Базы данных временных рядов. Хранят и управляют данными с временными метками.
🔹Графовая база данных. Подходит для сложных отношений между неструктурированными объектами.
🔹Документное хранилище. Хорошо подходят для больших неизменяемых данных.
🔹Хранилище широких колонок. Обычно используются для больших данных, аналитики, отчетности и т. д., где требуются денормализованные данные.
Очевидно, что тут не описаны все типы баз данных.
Есть ли что-то еще, что вы часто используете, и почему вы выбрали именно эту технологию?
@sqlhub
🖥 Поиск строк в одной таблице, отсутствующих в другой, в Oracle Database с помощьюt1 MINUS t2
Любые дубликаты строк только в T1 исключаются из результатов
В 21c добавлен MINUS ALL, который возвращает избыточные дубликаты.
Также добавлен синоним MINUS - EXCEPT, соответствующий стандарту #SQL
Oператор MINUS используется для возврата всех строк первого запроса SELECT, не возвращаемых вторым SELECT.
@sqlhub
Новый год — старт для ваших новых карьерных возможностей 🎄
6 февраля приглашаем на Зимнюю ярмарку вакансий, которая пройдёт офлайн и онлайн. Это классная возможность стать частью IT-сообщества Яндекса и познакомиться с теми, кто создаёт сервисы с многомиллионной аудиторией.
Что вас ждёт
🔸 Вакансии для стажёров
Узнаете о новых вакансиях и задачах, а также сможете лично пообщаться с командами и подать заявку туда, где понравится больше всего.
🔸 Полезные лекции
Узнаете о технологиях и кейсах из практики от экспертов Яндекса. Лекции пройдут по основным направлениям стажировки: бэкенд, фронтенд, мобильная разработка, аналитика и машинное обучение.
🔸 Нетворкинг со стажёрами Яндекса
Узнаете, как они проходили отбор, как готовились и чем планируют заниматься дальше. Сейчас в Яндексе одновременно стажируются более 600 человек — им есть что рассказать.
Как попасть на Зимнюю ярмарку вакансий
Чтобы попасть на ярмарку, нужно пройти предварительный отбор — решить задачи на Яндекс Контесте до 31 января включительно. Мы проверим решения, оценим анкеты и позовём лучших на день стажёра в Москве. Приглашения придут до 2 февраля включительно.
🍭 Закрытое шоу
Тех, кто решит все задачи из Контеста, мы пригласим на вечернее закрытое шоу «Всё в плюсе». Это соревнование между различными бизнес-группами Яндекса, в которых примут участие и стажёры, и топовые разработчики. Знакомство с различными сервисами, нетворкинг с действующими стажёрами, вечеринка с кавер-группой и диджеем — это то, что ждёт вас на шоу.
Узнать подробности и подать заявку — https://yandex.ru/yaintern/intern-day.
💻Утилита стратегического мониторинга PostgreSQL
⏩Основная задача стратегического мониторинга — предоставление количественной информации о наиболее ресурсоемких активностях СУБД. Такая информация очень полезна для анализа нагрузки СУБД, например, при проведении нагрузочного тестирования.
⏩Стратегический мониторинг сам по себе никакие проблемы не решает, но может подсказать, на что обратить внимание. Одним из средств стратегического мониторинга является расширение pg_profile/pgpro_pwr — собственно, об этом и идёт речь в видео.
Спикер рассказывает об архитектуре, возможностях, особенностях работы и способах применения этих расширений.
⏩Видео будет интересено всем, кто работает с СУБД Postgres — администраторам баз данных, инженерам нагрузочного тестирования и разработчикам приложений, непосредственно взаимодействующих с базами данных Postgres.
Enjoy)
📎 YouTube
📎 Презентация
@sqlhub
💻Параллелизм базы данных в PostgreSQL
Управление параллелизмом является важным аспектом в системах БД, которые имеют дело с множеством параллельно выполняющихся транзакций. В PostgreSQL применяются различные методы для обеспечения параллельного доступа к базе данных при поддержке согласованного состояния данных с использованием свойств атомарности и изоляции ACID (атомарность, согласованность, изоляция и длительность).
⏩Пессимистичная блокировка
Этот метод управления параллелизмом используется в системах баз данных для обеспечения параллельного доступа к разделяемым данным. Это осторожный подход, предполагающий, что конфликты между транзакциями весьма вероятны, и предотвращает конфликты наложением блокировок на объекты базы данных (строки или таблицы). Пессимистичное блокирование гарантируют эксклюзивный доступ к данным, но оно может привести к расширению блокировок и сокращению параллелизма по сравнению с подходом оптимистичного блокирования.
⏩Оптимистичная блокировка
Оптимистичный подход в технике управления параллелизмом исходит из того, что конфликты между транзакциями редки, и это позволяет обрабатывать транзакции без наложения блокировок на объекты базы
данных при выполнении всей транзакции. Конфликты проверяются, обнаруживаются и разрешаются только во время фиксации транзакции.
📎 Подробнее о параллелизме БД можно почитать тут, рекомендую. Вот ещё неплохая статья в тему
@sqlhub
⚡️ Бесплатный видеокурс. SQL практикум на базе MySQL
Спроектируем базу данных популярного мессенджера и научимся писать запросы к ней (4.5 часа качественного видеоматериала).
💡 Курс
@sqlhub
💻Как получить текстовый дамп базы данных Postgres в Heroku
Для создания дампа базы данных PostgreSQL в текстовом формате на Heroku выполните два действия:
1️⃣Создайте и загрузите резервную копию:
heroku pg:backups:capture && heroku pg:backups:download
pg_restore:
pg_restore -f mydb.sql latest.dump
mydb.sql — это конечный файл с вашими данными. До начала работы убедитесь, что у вас установлен Postgres для использования команды pg_restore.
💻Как создать процедуру в PostgreSQL?
⏩Итак, для создания процедуры в PostgreSQL используется язык PL/pgSQL, который является расширением языка SQL. Вот пример создания простой хранимой процедуры в PostgreSQL:
CREATE OR REPLACE FUNCTION 'имя_процедуры(параметры)' RETURNS 'тип_результата' AS $$
DECLARE
-- переменные_локальные тип_переменной
BEGIN
-- Тело процедуры
-- Может содержать SQL запросы, управляющие конструкции и другие операторы
END;
$$ LANGUAGE plpgsql;
CREATE OR REPLACE FUNCTION hello_world()
RETURNS VOID AS $$
BEGIN
RAISE NOTICE 'Hello, World!';
END;
$$ LANGUAGE plpgsql;
SELECT hello_world();
Yandex Open Source Jam — необычное мероприятие от Яндекса
Что вас ждет:
—мастер-классы — как сделать документацию и лендинг для своего проекта за полчаса, а также как выбрать лицензию для своего опенсорса
— круглый стол, посвященный главным проблемам и вопросам сферы
— интересные доклады
— неформальное общение с разработчиками из Яндекса и других компаний
Встречаемся 23 апреля в Москве («Агломерат») и онлайн (трансляция на сайте). Переходите по ссылке для регистрации.
🖥 Допустим вы хотите получить минимальное или максимальное значения из индексированного столбца.
Очевидно, что это будет первая, либо последняя запись в этом столбце.
База данных Oracle знает об этом, поэтому может оптимизировать данный запрос:INDEX FULL SCAN (MIN/MAX)
илиINDEX RANGE SCAN (MIN/MAX)
При этом запросе считывается только одна необходимая запись.
@sqlhub
🖥 Огромная шпаргалка с готовыми запросами SQL (SQLite)
▪ Смотреть
@sqlhub
🖥 SQL в Фокусе: Полное Руководство. 100 ключевых Вопросов с собеседований. Часть 1.
▪Читать
#junior
@sqlhub
Очное обучение Data Science в НИУ ВШЭ — старт 14 февраля
❔Кому подходит программа «Специалист по Data Science»?
✔Начинающим: Вы изучите основы программирования, математики, машинного обучения и работы с Big Data.
✔Специалистам не из IT: Освоите новые методы и инструменты для работы с данными в вашей области.
✔Программистам: Подтянете свои знания в алгоритмах, структурах данных и научитесь обучать нейронные сети.
За 1.5 года вместе с опытными преподавателями и практикующими специалистами вы:
✔Разберетесь в направлениях Data Science: Изучите программирование на Python, математику для анализа данных, прикладную статистику, классические ML-модели и нейросети, а также основы обработки текстов, звука и изображений.
✔Разовьете hard skills: Освоите SQL, Python, Jupyter Notebook, Spark, Tensorflow, Pytorch и другие инструменты.
✔Выполните 3 проекта: Напишете чат-бота, программу для машинного обучения и защитите финальный проект. Это хорошая возможность пополнить портфолио, особенно для начинающих.
✔Получите самые актуальные знания по специальности и сможете работать специалистом по Data Science в крупных IT-компаниях.
Обучение очное в кампусе НИУ ВШЭ в Москве.
Старт: 14 февраля
Стоимость: 58 125₽ раз в 2 месяца при рассрочке без переплат: 8 платежей. Или 465 000₽ за весь курс.
Полная программа и регистрация: по ссылке.
Реклама. НИУ ВШЭ.
ИНН 7714030726
Erid: 2SDnjd72JW4
🖥 DuckDB
Теперь в DuckDB можно подключать базы данных MySQL, Postgres и SQLite в дополнение к базам данных, хранящимся в ее собственном формате.
Это позволяет считывать данные в DuckDB и перемещать их между этими системами удобным способом.
▪Подробнее
▪Github
@sqlhub
🔍 Manticoresearch
Manticore Search - это простая в использовании быстрая база данных с открытым исходным кодом для поиска. Хорошая альтернатива Elasticsearch. От других решений его отличает следующее:
Она очень быстрая и более экономичная, чем альтернативы, например, Manticore:
▪182 раза быстрее, чем MySQL для небольших датасетов
▪В 29 раз быстрее, чем Elasticsearch для анализа журналов
▪В 15 раз быстрее, чем Elasticsearch для небольших наборов данных
▪В 5 раз быстрее, чем Elasticsearch для средних датасетов
▪В 4 раза быстрее, чем Elasticsearch для больших датасетов
github.com/manticoresoftware/manticoresearch
@sqlhub
🔥 Разбор гигантских наборов данных JSON за считанные секунды с помощью JSONalyze, новейшего механизма запросов.
JSONalyze принимает JSON (например, ответ API) и преобразует его в таблицу SQLite.
Затем он выполняет точные SQL-запросы к этим данным, чтобы ответить на ваш запрос!
Это отличная комбинация LlamaIndex для работы со структурированными и полуструктурированными данными, а также преобразования текста в SQL.
https://docs.llamaindex.ai/en/latest/examples/query_engine/JSONalyze_query_engine.html
@sqlhub
🖥 MongoDB для Python - NoSQL база данных.
https://www.youtube.com/watch?v=THXT_SGo6xs
@sqlhub