Data Science. SQL hub
35.9K subscribers
913 photos
49 videos
37 files
972 links
По всем вопросам- @workakkk

@itchannels_telegram - 🔥лучшие ит-каналы

@ai_machinelearning_big_data - Machine learning

@pythonl - Python

@pythonlbooks- python книги📚

@datascienceiot - ml книги📚

РКН: https://vk.cc/cIi9vo
Download Telegram
Каковы основные кэш стратегии?

Считать данные из системы:
🔹 Cache aside
🔹 Read through

Запись данных в систему:
🔹 Write around
🔹 Write back
🔹 Write through

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

@sqlhub
👍13🔥32
🖥 Если вы работаете в области данных, вам предстоит пройти собеседование по SQL.

Неважно, кто вы - специалист по машинному обучению или инженер по обработке данных.

SQL присутствует везде.

Вот несколько кратких советов от начинающих до продвинутых, которые вы должны знать и уметь говорить на собеседовании по SQL.

Начинающим
- Уметь объяснить различные типы объединений. Иногда я видел, что этот вопрос задается рекрутерами в качестве отборочного, чтобы убедиться, что они хотят взять вас на работу.
- Знать, когда в порядке выполнения операций в SQL используется HAVING, а когда WHERE.
- Знать разницу между UNION и UNION ALL

Mid
- Понимать, как использовать оператор CASE внутри функции SUM или COUNT
- Знать, по крайней мере, 1-2 способа оптимизации запроса, и если вы решите, что одним из этих способов является создание индекса в таблице, то вы должны знать, какие плюсы и минусы есть у индекса.
- Уметь реализовать как подзапрос, так и CTE, но использовать CTE, если вы хотите доказать, что у вас хорошие навыки работы с SQL.

Продвинутый
- Знать, как решить SQL задачу с использованием оконной функции и без нее.
- Понимать и уметь объяснить, что такое коррелированный подзапрос.
- Просто сошлитесь на то, что вы посмотрите на план выполнения запроса. Рекрутеры будут шокированы тем, что вы вообще знаете, что это такое.

Мне бы хотелось услышать, какие вопросы вам задавали на собеседованиях по SQL. Пожалуйста, поделитесь ими в комментаряих!

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍194🔥3😁1
«Консервируем» данные: модули pickle и dill

Сериализация данных – это преобразование данных, обрабатываемых в программе (структур и объектов) в форматы, которые можно хранить и передавать.

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

Сериализация данных с помощью pickle

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

В общем случае, сохранение и загрузка с использованием модуля pickle выглядит так:

import pickle
with open('pickle_dump_ex', 'wb') as output_file:
pickle.dump(data_to_save, output_file)

with open('pickle_dump_ex', 'rb') as input_file:
data_to_load = pickle.load(input _file)


Pickle позволяет сериализовать большое количество разнообразных объектов, используемых в python. Можно даже выполнять сериализацию пользовательских классов и функций, с тем нюансом что код функций или классов не сериализуется, а сериализуются только конкретные объекты и ссылки на функции. Это значит, что для успешного распаковывания объектов требуется исходный код.

Примечательно, что библиотека позволяет исполнять программный код при десериализации данных. Функционал библиотеки позволяет добавить в класс методы getstate, setstate, и reduce, который описывает поведение объекта при сериализации/десериализации. Поэтому очень важно знать, что в файле не содержится вредоносного кода. С другой стороны, это может быть удобным подспорьем если требуется, например, напомнить себе о том на каком этапе находилась обработка перед сохранением объекта.

Выглядит это следующим образом:

Смотреть
👍84🔥1
🖥 Хотите получить N процентов строк из вашей таблицы?

Вы можете сделать это в SQL с помощью:

SELECT * FROM ...
ORDER BY ...
FETCH FIRST 10 PERCENT ROWS ONLY

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍374🔥2
📘 Большой, профессиональный перевод документации PostgreSQL на русском с примера кода и запросов

Подробный гайд от установки и настройки
Основы и темы и синтаксиса языка SQL
Все виды запросов, типы данных, функции и операторы
Преобразование типов, индексы и многое другое

📌 Документация

@sqlhub
8👍4🔥2
🖥 Как базы данных выполняют SQL-запросы?

Процесс выполнения SQL-запросов в базе данных включает в себя несколько компонентов, взаимодействующих между собой. Хотя конкретная архитектура различных систем баз данных может отличаться, ниже описана общая последовательность действий.

1. Оператор SQL запускается в клиентской программе и передается по сети на сервер базы данных.

2. Когда сервер базы данных получает SQL-оператор, реляционный движок начинает его обработку. Сначала синтаксический анализатор проверяет правильность оператора. Затем он преобразует оператор в дерево запросов, которое представляет собой внутреннюю структуру данных.

3. Оптимизатор запросов просматривает дерево запросов и определяет наиболее эффективный способ выполнения SQL-оператора, создавая план выполнения.

4. План выполнения передается исполнителю запроса, который использует его для координации получения или изменения данных в соответствии с запросом SQL. Для доступа к данным исполнитель взаимодействует с движком хранилища.

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

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

7. При записи данных со вставкой или обновлением менеджер транзакций следит за тем, чтобы изменения происходили атомарно и сохраняли целостность базы данных.

8. В то же время менеджер блокировок накладывает блокировки, чтобы несколько транзакций могли выполняться одновременно, не конфликтуя между собой. Таким образом, обеспечивается изоляция и согласованность.

Работая вместе, эти компоненты обеспечивают надежную и эффективную обработку SQL-запросов в системе управления базами данных.

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥24👍104
🖥 Solid Core Database System

scdb
- это легкий и быстрый механизм хранения данных типа "ключ-значение", отличающийся простотой и скоростью работы, написанная на Go.

Инструмент создан по образцу архитектуры хранения Bitcask, известной своей эффективностью при операциях записи.

Основной принцип построения scdb (и Bitcask) основан на файловых системах с лог-структурой. При таком подходе все изменения добавляются в конец журнала, что делает запись исключительно быстрой, поскольку она осуществляется последовательно. Такая конструкция не только обеспечивает быстродействие, но и гарантирует целостность данных: даже в случае сбоя системы можно легко восстановить данные благодаря этому методу, основанному только на приложении.

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

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

🖥 Github

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🔥1
SQLite: База данных, на которой работают миллиарды устройств

Если вы когда-либо пользовались смартфоном, просматривали веб-страницы или взаимодействовали с цифровыми устройствами, то, скорее всего, вам приходилось работать с SQLite.

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

Что же делает SQLite столь широко используемым? Несколько ключевых качеств:

☑️ Компактность и самодостаточность.
- Вся библиотека представляет собой один файл размером от 750 КБ с нулевыми зависимостями
- Встраивается непосредственно в хост-приложение вместо клиент-серверной установки

☑️ Портативность и долговечность
- Кроссплатформенный формат файлов работает на любой архитектуре

☑️ Быстрота и надежность
- Поддерживает десятки тысяч транзакций в секунду

☑️ Простота использования
- Простой, стабильный API на языке C, не требующий настройки
- Проверено более чем 20 годами использования в различных приложениях.

Результат? SQLite сегодня используется в миллиардах устройств. 🤯

Устройства на базе iOS и Android, браузеры Chrome, Safari и Firefox, языки программирования Python и PHP - SQLite присутствует везде!

Благодаря своей универсальности и вездесущности SQLite за прошедшие годы нашла свое применение в самых неожиданных приложениях.

Какие самые необычные варианты использования SQLite вы видели или слышали?

@sqlhub
17👍4🔥1
💥 15 примеров задач по SQL на собеседовании по вакансии системного аналитика

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

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

📌 Читать дальше

@sqlhub
7👍2🔥2👎1
🦾 Вектореные базы данных

Вектор - это массив чисел, выражающий положение точки в пространстве по нескольким измерениям.

Как векторы связаны с эмбедингами?

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

Как работает векторная база данных?

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

Как векторные базы данных используются в ИИ?
Векторные базы данных имеют несколько ключевых направлений использования в ИИ:

- Семантический поиск - поиск информации на основе смысла.
- Большие языковые модели - понимание слов в контексте для генерации и обобщения информации.
- Обнаружение аномалий - выявление аномальных точек данных.
- Классификация изображений - категоризация изображений на основе визуальных свойств.

Weaviate - это векторная база данных с открытым исходным кодом, которая хранит как объекты, так и векторы, позволяя сочетать векторный поиск и структурированную фильтрацию с отказоустойчивостью и масштабируемостью облачной нативной базы данных, доступной через GraphQL, REST и различные языковые клиенты.

📌 Github

@sqlhub
👍86🔥2
🐼 Используйте векторные операции #pandas вместо того, чтобы выполнять операции над каждым столбцом по отдельности.

Это позволяет использовать оптимизированную реализацию pandas на языке C для повышения производительности, особенно при работе с большими массивами данных.

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥31
⚡️ Совет по работе с базами данных

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

Однако удалить старые данные можно очень эффективно, если разбить таблицу на временные диапазоны и удалить один из них.

@sqlhub
👍20🔥54
🖥 DBA1. Администрирование PostgreSQL 13. Базовый курс

1. Введение
2. Установка и управление сервером
3. Использование psql
4. Конфигурирование
5. Общее устройство PostgreSQL
6. Изоляция и многоверсионность
7. Очистка
8. Буферный кеш и журнал
9. Базы данных и схемы
10. Системный каталог

#video #database

https://www.youtube.com/watch?v=yevXLP2LA4Q&list=PLaFqU3KCWw6LPcuYVymLcXl3muC45mu3e

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍20🔥94
This media is not supported in your browser
VIEW IN TELEGRAM
Именно поэтому долговечность - самое важное свойство базы данных.

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

Как базы данных гарантируют, что мы не потеряем наши данные?

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

Всякий раз, когда пользователь выполняет транзакцию, база данных делает две вещи:

▪️записывает данные в отдельный журнал
▪️производит обновление.

Журнал позволяет обрабатывать транзакции во время перезагрузки.

Запись в журнал происходит быстро, потому что это двоичный файл только для добавления.

Что делать, если база данных распределена?

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

Существует процесс, в котором один из серверов выступает в роли координатора:

▪️он передает сообщение о фиксации всем участникам
▪️ожидает всех подтверждений
▪️сообщает о фиксации или откате

@sqlhub
👍13🔥52
This media is not supported in your browser
VIEW IN TELEGRAM
Никто:
SQL-разработчики:


@sqlhub
👍23😁16🔥6🤩4👏31👎1🥰1🤔1
🖥 Relational Deep Learning - это новый подход к представлению данных, распределенных по нескольким таблицам, например, в реляционной базе данных (см. статью).

RelBench - это бенчмарк, который призван способствовать эффективным, надежным и воспроизводимым исследованиям в этом направлении.

Он включает в себя коллекцию реалистичных, масштабных и разнообразных датасетов, структурированных в виде реляционных таблиц.

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

Github
Проект

@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
ℹ️HNSWℹ️

Иерархический маленький мир (Hierarchical Navigable Small-World graph, HNSW) — один из самых быстрых алгоритмов приблизительного поиска ближайших соседей. Поисковый индекс в HNSW представляет собой многоуровневую структуру, в которой каждый уровень является графом близости. Каждый узел графов соответствует одному из векторов запросов.

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

Поиск ближайших соседей в HNSW использует метод увеличения (zooming-in). Он начинается во входной ноде самого верхнего уровня и рекурсивно выполняет жадный обход графов на каждом уровне, пока не достигнет локального минимума на самом дне.

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


Как это работает?

▪️HNSW организует векторы в многослойную графовую структуру.
▪️Узлы в каждом слое поддерживают связи на основе расстояний в векторном пространстве.
▪️Навигация происходит иерархически, начиная с верхнего слоя и спускаясь вниз для уточнения поиска.
▪️Более высокие слои строятся путем подвыборки узлов из нижних слоев.

Почему HNSW?

▪️Скорость: иерархическая структура означает, что алгоритм поиска может перемещаться по графу быстрее, чем при плоской структуре.
▪️Масштабируемость: Поскольку кэш-память хранит только верхний слой, а затем добавляет только соседние векторы в дальнейших слоях, это очень эффективно и масштабируемо.
▪️Адаптируемость: HNSW очень надежен и может одновременно работать с импортом и запросами.

@sqlhub
👍16🎉2🔥1
ℹ️Масштабирование базы данныхℹ️

Масштабировать чтение базы данных очень просто. Проблемы начинаются, когда вы хотите масштабировать записи!

▪️Почему?

Чтобы масштабировать чтение, вы просто реплицируете данные на несколько узлов.

Ведущий узел обрабатывает запросы на запись, а последующие - на чтение.

Однако масштабирование операций записи - это совсем другое дело.

Чтобы масштабировать запись, вы позволяете нескольким узлам обрабатывать запросы на запись.

Это более известно как активно-активная настройка.

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

Но такая схема может привести к конфликтам.

На этом этапе вам необходимо иметь какой-то алгоритм разрешения конфликтов.

@sqlhub
👍6👎3👏2🔥1
ℹ️База данных и паролиℹ️

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

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

Некоторые альтернативные подходы включают в себя:

▪️Использование сторонних служб аутентификации (например, OAuth) для обработки входа в систему.
▪️Использование федеративного управления идентификацией и единого входа (SSO) для минимизации использования паролей.

НЕЛЬЗЯ:

- Хранить пароли в формате обычного текста
- Хешировать пароли без разделения

ОБЯЗАТЕЛЬНО:

- Хешировать пароли перед хранением с помощью криптографических функций.
- Следуйте отраслевым стандартам, таким как OWASP, для реализации соления и хэширования.
- Правильно проверяйте попытки входа в систему, сравнивая хэши входных паролей и хранимых хэшей по времени.
👍152🔥2😁1