Каковы основные кэш стратегии?
Считать данные из системы:
🔹 Cache aside
🔹 Read through
Запись данных в систему:
🔹 Write around
🔹 Write back
🔹 Write through
На диаграмме в изображении показано, как работают эти 5 стратегий. Некоторые из них могут использоваться совместно.
@sqlhub
Считать данные из системы:
🔹 Cache aside
🔹 Read through
Запись данных в систему:
🔹 Write around
🔹 Write back
🔹 Write through
На диаграмме в изображении показано, как работают эти 5 стратегий. Некоторые из них могут использоваться совместно.
@sqlhub
👍13🔥3❤2
Неважно, кто вы - специалист по машинному обучению или инженер по обработке данных.
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
👍19❤4🔥3😁1
«Консервируем» данные: модули pickle и dill
Сериализация данных – это преобразование данных, обрабатываемых в программе (структур и объектов) в форматы, которые можно хранить и передавать.
Задача состоит в том, чтобы можно было в дальнейшем воссоздать точную копию сохранённых данных, не утратив какую-либо информацию. В python есть разнообразные способы сделать это, некоторые их которых я и приведу в этом посте.
Сериализация данных с помощью pickle
Рассмотрю для начала стандартную библиотеку pickle. Библиотека работает с двоичными потоками данных, как в файл, так и по сети. Открыв один поток можно последовательно добавлять в него данные, при этом повторное добавление данных не приводит к их задвоению в итоговом файле, так как модуль pickle хранит историю.
В общем случае, сохранение и загрузка с использованием модуля pickle выглядит так:
Pickle позволяет сериализовать большое количество разнообразных объектов, используемых в python. Можно даже выполнять сериализацию пользовательских классов и функций, с тем нюансом что код функций или классов не сериализуется, а сериализуются только конкретные объекты и ссылки на функции. Это значит, что для успешного распаковывания объектов требуется исходный код.
Примечательно, что библиотека позволяет исполнять программный код при десериализации данных. Функционал библиотеки позволяет добавить в класс методы getstate, setstate, и reduce, который описывает поведение объекта при сериализации/десериализации. Поэтому очень важно знать, что в файле не содержится вредоносного кода. С другой стороны, это может быть удобным подспорьем если требуется, например, напомнить себе о том на каком этапе находилась обработка перед сохранением объекта.
Выглядит это следующим образом:
Смотреть
Сериализация данных – это преобразование данных, обрабатываемых в программе (структур и объектов) в форматы, которые можно хранить и передавать.
Задача состоит в том, чтобы можно было в дальнейшем воссоздать точную копию сохранённых данных, не утратив какую-либо информацию. В 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, который описывает поведение объекта при сериализации/десериализации. Поэтому очень важно знать, что в файле не содержится вредоносного кода. С другой стороны, это может быть удобным подспорьем если требуется, например, напомнить себе о том на каком этапе находилась обработка перед сохранением объекта.
Выглядит это следующим образом:
Смотреть
👍8❤4🔥1
Вы можете сделать это в SQL с помощью:
SELECT * FROM ...
ORDER BY ...
FETCH FIRST 10 PERCENT ROWS ONLY
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍37❤4🔥2
📘 Большой, профессиональный перевод документации PostgreSQL на русском с примера кода и запросов
▪Подробный гайд от установки и настройки
▪Основы и темы и синтаксиса языка SQL
▪Все виды запросов, типы данных, функции и операторы
▪Преобразование типов, индексы и многое другое
📌 Документация
▪Подробный гайд от установки и настройки
▪Основы и темы и синтаксиса языка SQL
▪Все виды запросов, типы данных, функции и операторы
▪Преобразование типов, индексы и многое другое
📌 Документация
@sqlhub
❤8👍4🔥2
🔥 Дайджест полезных материалов из мира SQL за неделю
Почитать:
— Проблемы при переходе с MS SQL на PostgreSQL. Типы данных
— Лучшие ресурсы чтобы выучить Git и Github
— Деревья ltree в PostgreSQL – простым языком
— Пишем свой QTableView (продолжение: кастомные стили)
— Row Level Security with an ARRAY of tenants set in session parameter
— What the pluck?
— Partition Strategies: Fundamental Concepts for PostgreSQL Partitioning
— WEREWOLF WEED
— Deploying Adminer on Google App Engine (GAE) with Private and Public IP Connectivity
— O problema de SQL que quase me enlouqueceu
— The Benefits of Hiring a Professional Website Development Company in Bangalore
— Implicit vs. explicit JOINs
— A simple example of a nested SQL query
Посмотреть:
🌐 Пишем генератор Shorts видео на Python для заработка на YouTube. (⏱ 11:50)
🌐 Озвучка и генерации контента с помощью #Python и AI (⏱ 00:44)
🌐 Замена лица на любой фотографии с помощью #python БЕСПЛАТНО! (⏱ 00:59)
Хорошего дня!
#sql #digest
@sqlhub
Почитать:
— Проблемы при переходе с MS SQL на PostgreSQL. Типы данных
— Лучшие ресурсы чтобы выучить Git и Github
— Деревья ltree в PostgreSQL – простым языком
— Пишем свой QTableView (продолжение: кастомные стили)
— Row Level Security with an ARRAY of tenants set in session parameter
— What the pluck?
— Partition Strategies: Fundamental Concepts for PostgreSQL Partitioning
— WEREWOLF WEED
— Deploying Adminer on Google App Engine (GAE) with Private and Public IP Connectivity
— O problema de SQL que quase me enlouqueceu
— The Benefits of Hiring a Professional Website Development Company in Bangalore
— Implicit vs. explicit JOINs
— A simple example of a nested SQL query
Посмотреть:
🌐 Пишем генератор Shorts видео на Python для заработка на YouTube. (⏱ 11:50)
🌐 Озвучка и генерации контента с помощью #Python и AI (⏱ 00:44)
🌐 Замена лица на любой фотографии с помощью #python БЕСПЛАТНО! (⏱ 00:59)
Хорошего дня!
#sql #digest
@sqlhub
👍8🔥3❤1
Процесс выполнения
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👍10❤4
scdb - это легкий и быстрый механизм хранения данных типа "ключ-значение", отличающийся простотой и скоростью работы, написанная на Go.
Инструмент создан по образцу архитектуры хранения Bitcask, известной своей эффективностью при операциях записи.
▪Основной принцип построения scdb (и Bitcask) основан на файловых системах с лог-структурой. При таком подходе все изменения добавляются в конец журнала, что делает запись исключительно быстрой, поскольку она осуществляется последовательно. Такая конструкция не только обеспечивает быстродействие, но и гарантирует целостность данных: даже в случае сбоя системы можно легко восстановить данные благодаря этому методу, основанному только на приложении.
▪Кроме того, в scdb реализован процесс, известный как объединение файлов журнала. Со временем, когда ваше приложение записывает все больше данных, количество файлов журнала естественным образом увеличивается. Объединение лог-файлов - это техника, которая объединяет файлы для предотвращения фрагментации и поддержания производительности. Это похоже на домашнюю уборку, обеспечивающую организованность и эффективность хранения данных.
▪Таким образом, если вы разрабатываете приложение, требующее быстрой записи данных и простого, но надежного решения для хранения данных, scdb может оказаться именно тем механизмом, который вы ищете. Он создан для того, чтобы обеспечить разработчикам, подобным вам, удобство хранения и извлечения пар ключ-значение.
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3🔥1
SQLite: База данных, на которой работают миллиарды устройств
Если вы когда-либо пользовались смартфоном, просматривали веб-страницы или взаимодействовали с цифровыми устройствами, то, скорее всего, вам приходилось работать с SQLite.
SQLite незаметно питает наш цифровой мир. Впервые выпущенный в 2000 г., этот компактный механизм баз данных сегодня используется в миллиардах приложений, браузеров, операционных систем и устройств.
Что же делает SQLite столь широко используемым? Несколько ключевых качеств:
☑️ Компактность и самодостаточность.
- Вся библиотека представляет собой один файл размером от 750 КБ с нулевыми зависимостями
- Встраивается непосредственно в хост-приложение вместо клиент-серверной установки
☑️ Портативность и долговечность
- Кроссплатформенный формат файлов работает на любой архитектуре
☑️ Быстрота и надежность
- Поддерживает десятки тысяч транзакций в секунду
☑️ Простота использования
- Простой, стабильный API на языке C, не требующий настройки
- Проверено более чем 20 годами использования в различных приложениях.
Результат? SQLite сегодня используется в миллиардах устройств. 🤯
Устройства на базе iOS и Android, браузеры Chrome, Safari и Firefox, языки программирования Python и PHP - SQLite присутствует везде!
Благодаря своей универсальности и вездесущности SQLite за прошедшие годы нашла свое применение в самых неожиданных приложениях.
Какие самые необычные варианты использования SQLite вы видели или слышали?
@sqlhub
Если вы когда-либо пользовались смартфоном, просматривали веб-страницы или взаимодействовали с цифровыми устройствами, то, скорее всего, вам приходилось работать с 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
Если вы читаете этот материал, скорее всего, вы рассматриваете перспективы карьерного роста в области системного анализа, и возможно, готовитесь к собеседованию.
Важным аспектом работы системного аналитика является умение эффективно работать с базами данных, и SQL — это ключевой инструмент для этого. Будьте готовы, что на техническом собеседовании вас могут попросить назвать операторы SQL, написать запросы для извлечения, обновления или удаления данных, создания новых таблиц и многого другого. Давайте посмотрим на некоторые примеры таких заданий.
📌 Читать дальше
@sqlhub
❤7👍2🔥2👎1
🦾 Вектореные базы данных
Вектор - это массив чисел, выражающий положение точки в пространстве по нескольким измерениям.
Как векторы связаны с эмбедингами?
В машинном обучении эмбединги - это векторы, представляющие такие точки данных, как слова, предложения, изображения и т.д.
Как работает векторная база данных?
Векторная база данных хранит эмбединги для различных точек данных, таких как документы, изображения, продукты и т.д. Она сопоставляет эти эмбединги с исходными данными.
Как векторные базы данных используются в ИИ?
Векторные базы данных имеют несколько ключевых направлений использования в ИИ:
- Семантический поиск - поиск информации на основе смысла.
- Большие языковые модели - понимание слов в контексте для генерации и обобщения информации.
- Обнаружение аномалий - выявление аномальных точек данных.
- Классификация изображений - категоризация изображений на основе визуальных свойств.
Weaviate - это векторная база данных с открытым исходным кодом, которая хранит как объекты, так и векторы, позволяя сочетать векторный поиск и структурированную фильтрацию с отказоустойчивостью и масштабируемостью облачной нативной базы данных, доступной через
📌 Github
@sqlhub
Вектор - это массив чисел, выражающий положение точки в пространстве по нескольким измерениям.
Как векторы связаны с эмбедингами?
В машинном обучении эмбединги - это векторы, представляющие такие точки данных, как слова, предложения, изображения и т.д.
Как работает векторная база данных?
Векторная база данных хранит эмбединги для различных точек данных, таких как документы, изображения, продукты и т.д. Она сопоставляет эти эмбединги с исходными данными.
Как векторные базы данных используются в ИИ?
Векторные базы данных имеют несколько ключевых направлений использования в ИИ:
- Семантический поиск - поиск информации на основе смысла.
- Большие языковые модели - понимание слов в контексте для генерации и обобщения информации.
- Обнаружение аномалий - выявление аномальных точек данных.
- Классификация изображений - категоризация изображений на основе визуальных свойств.
Weaviate - это векторная база данных с открытым исходным кодом, которая хранит как объекты, так и векторы, позволяя сочетать векторный поиск и структурированную фильтрацию с отказоустойчивостью и масштабируемостью облачной нативной базы данных, доступной через
GraphQL, REST
и различные языковые клиенты.📌 Github
@sqlhub
👍8❤6🔥2
⚡️ Совет по работе с базами данных
Удаление сотен тысяч строк происходит медленно, влияет на производительность и не освобождает память.
Однако удалить старые данные можно очень эффективно, если разбить таблицу на временные диапазоны и удалить один из них.
@sqlhub
Удаление сотен тысяч строк происходит медленно, влияет на производительность и не освобождает память.
Однако удалить старые данные можно очень эффективно, если разбить таблицу на временные диапазоны и удалить один из них.
@sqlhub
👍20🔥5❤4
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🔥9❤4
This media is not supported in your browser
VIEW IN TELEGRAM
Именно поэтому долговечность - самое важное свойство базы данных.
Может случиться много неприятных вещей: отключение электричества, системные сбои или отказ оборудования.
❓Как базы данных гарантируют, что мы не потеряем наши данные?❓
Основная идея заключается в том, чтобы хранить данные в энергонезависимом хранилище, например на диске.
Всякий раз, когда пользователь выполняет транзакцию, база данных делает две вещи:
▪️записывает данные в отдельный журнал
▪️производит обновление.
Журнал позволяет обрабатывать транзакции во время перезагрузки.
Запись в журнал происходит быстро, потому что это двоичный файл только для добавления.
Что делать, если база данных распределена?
Этот случай более сложный, поскольку серверы базы данных должны координировать свои действия
Существует процесс, в котором один из серверов выступает в роли координатора:
▪️он передает сообщение о фиксации всем участникам
▪️ожидает всех подтверждений
▪️сообщает о фиксации или откате
@sqlhub
Может случиться много неприятных вещей: отключение электричества, системные сбои или отказ оборудования.
❓Как базы данных гарантируют, что мы не потеряем наши данные?❓
Основная идея заключается в том, чтобы хранить данные в энергонезависимом хранилище, например на диске.
Всякий раз, когда пользователь выполняет транзакцию, база данных делает две вещи:
▪️записывает данные в отдельный журнал
▪️производит обновление.
Журнал позволяет обрабатывать транзакции во время перезагрузки.
Запись в журнал происходит быстро, потому что это двоичный файл только для добавления.
Что делать, если база данных распределена?
Этот случай более сложный, поскольку серверы базы данных должны координировать свои действия
Существует процесс, в котором один из серверов выступает в роли координатора:
▪️он передает сообщение о фиксации всем участникам
▪️ожидает всех подтверждений
▪️сообщает о фиксации или откате
@sqlhub
👍13🔥5❤2
This media is not supported in your browser
VIEW IN TELEGRAM
👍23😁16🔥6🤩4👏3❤1👎1🥰1🤔1
RelBench - это бенчмарк, который призван способствовать эффективным, надежным и воспроизводимым исследованиям в этом направлении.
Он включает в себя коллекцию реалистичных, масштабных и разнообразных датасетов, структурированных в виде реляционных таблиц.
Эта прорывная технология открывает широкие возможности для работы с данными и поднимает новые интересные исследовательские вопросы.
▪Github
▪Проект
@sqlhub
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤3🔥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
Иерархический маленький мир (Hierarchical Navigable Small-World graph, HNSW) — один из самых быстрых алгоритмов приблизительного поиска ближайших соседей. Поисковый индекс в HNSW представляет собой многоуровневую структуру, в которой каждый уровень является графом близости. Каждый узел графов соответствует одному из векторов запросов.
Алгоритм индексирования HNSW позволяет эффективно осуществлять поиск ближайших соседей в векторных базах данных.
Поиск ближайших соседей в HNSW использует метод увеличения (zooming-in). Он начинается во входной ноде самого верхнего уровня и рекурсивно выполняет жадный обход графов на каждом уровне, пока не достигнет локального минимума на самом дне.
Подробности об алгоритме и методике поиска хорошо описаны в научной работе. Важно запомнить, что каждый цикл поиска ближайших соседей состоит из обхода узлов графов с вычислением расстояний между векторами. Ниже мы рассмотрим эти этапы, чтобы использовать данный метод для создания крупномасштабного индекса.
Как это работает?
▪️HNSW организует векторы в многослойную графовую структуру.
▪️Узлы в каждом слое поддерживают связи на основе расстояний в векторном пространстве.
▪️Навигация происходит иерархически, начиная с верхнего слоя и спускаясь вниз для уточнения поиска.
▪️Более высокие слои строятся путем подвыборки узлов из нижних слоев.
Почему HNSW?
▪️Скорость: иерархическая структура означает, что алгоритм поиска может перемещаться по графу быстрее, чем при плоской структуре.
▪️Масштабируемость: Поскольку кэш-память хранит только верхний слой, а затем добавляет только соседние векторы в дальнейших слоях, это очень эффективно и масштабируемо.
▪️Адаптируемость: HNSW очень надежен и может одновременно работать с импортом и запросами.
@sqlhub
👍16🎉2🔥1
ℹ️Масштабирование базы данныхℹ️
Масштабировать чтение базы данных очень просто. Проблемы начинаются, когда вы хотите масштабировать записи!
▪️Почему?
Чтобы масштабировать чтение, вы просто реплицируете данные на несколько узлов.
Ведущий узел обрабатывает запросы на запись, а последующие - на чтение.
Однако масштабирование операций записи - это совсем другое дело.
Чтобы масштабировать запись, вы позволяете нескольким узлам обрабатывать запросы на запись.
Это более известно как активно-активная настройка.
Идея заключается в том, что когда узел получает запрос на запись, он распространяет изменения на другие узлы.
Но такая схема может привести к конфликтам.
На этом этапе вам необходимо иметь какой-то алгоритм разрешения конфликтов.
@sqlhub
Масштабировать чтение базы данных очень просто. Проблемы начинаются, когда вы хотите масштабировать записи!
▪️Почему?
Чтобы масштабировать чтение, вы просто реплицируете данные на несколько узлов.
Ведущий узел обрабатывает запросы на запись, а последующие - на чтение.
Однако масштабирование операций записи - это совсем другое дело.
Чтобы масштабировать запись, вы позволяете нескольким узлам обрабатывать запросы на запись.
Это более известно как активно-активная настройка.
Идея заключается в том, что когда узел получает запрос на запись, он распространяет изменения на другие узлы.
Но такая схема может привести к конфликтам.
На этом этапе вам необходимо иметь какой-то алгоритм разрешения конфликтов.
@sqlhub
👍6👎3👏2🔥1
ℹ️База данных и паролиℹ️
Несмотря на удобство, самостоятельное хранение паролей создает значительные риски для безопасности.
В идеале мы должны стремиться к тому, чтобы по возможности не заниматься хранением паролей самостоятельно.
Некоторые альтернативные подходы включают в себя:
▪️Использование сторонних служб аутентификации (например, OAuth) для обработки входа в систему.
▪️Использование федеративного управления идентификацией и единого входа (SSO) для минимизации использования паролей.
НЕЛЬЗЯ:
- Хранить пароли в формате обычного текста
- Хешировать пароли без разделения
ОБЯЗАТЕЛЬНО:
- Хешировать пароли перед хранением с помощью криптографических функций.
- Следуйте отраслевым стандартам, таким как OWASP, для реализации соления и хэширования.
- Правильно проверяйте попытки входа в систему, сравнивая хэши входных паролей и хранимых хэшей по времени.
Несмотря на удобство, самостоятельное хранение паролей создает значительные риски для безопасности.
В идеале мы должны стремиться к тому, чтобы по возможности не заниматься хранением паролей самостоятельно.
Некоторые альтернативные подходы включают в себя:
▪️Использование сторонних служб аутентификации (например, OAuth) для обработки входа в систему.
▪️Использование федеративного управления идентификацией и единого входа (SSO) для минимизации использования паролей.
НЕЛЬЗЯ:
- Хранить пароли в формате обычного текста
- Хешировать пароли без разделения
ОБЯЗАТЕЛЬНО:
- Хешировать пароли перед хранением с помощью криптографических функций.
- Следуйте отраслевым стандартам, таким как OWASP, для реализации соления и хэширования.
- Правильно проверяйте попытки входа в систему, сравнивая хэши входных паролей и хранимых хэшей по времени.
👍15❤2🔥2😁1