Сообщения

Сообщения за ноябрь, 2019

Алгоритмическая сложность

Изображение
Алгоритмическая сложность связана с тем, насколько быстро или медленно работает конкретный алгоритм. Мы определяем сложность как числовую функцию T(n) - время против входного размера n. Мы хотим определить время, затраченное алгоритмом, не завися от деталей реализации. Но T(n) зависит от реализации. Данный алгоритм будет занимать различное количество времени на одних и тех же входах в зависимости от таких факторов, как: скорость процессора, набор команд, скорость диска, версия и тип компилятора и т. д. Обходной путь - асимптотически оценивать эффективность каждого алгоритма. Мы будем измерять время T(n) как количество элементарных "шагов" (определенных любым образом), при условии, что каждый такой шаг занимает постоянное время. Рассмотрим два классических примера: сложение двух целых чисел. Мы добавим два целых числа цифра за цифрой (или бит за битом), и это определит "шаг" в нашей вычислительной модели. Поэтому мы говорим, что сложение двух n-битных целых чисел

Агрегатные функции в PostgreSQL

Изображение
Как и большинство других реляционных баз данных, PostgreSQL поддерживает агрегатные функции . Агрегатная функция вычисляет один результат из нескольких входных строк. Например, есть агрегаты для вычисления количества (count), суммы (sum), среднего (avg), максимального (max) и минимального (min) количества строк. Возьмем таблицу: CREATE TABLE person( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL, `age` INT(4) NOT NULL, PRIMARY KEY (`id`) ); В качестве примера, мы можем найти самую старшую персону с помощью запроса: SELECT max(age) FROM person; max ----- 72 (1 row) Если бы мы хотели узнать, из какой записи (или записей) произошло это чтение, мы могли бы попробовать: SELECT name FROM person WHERE age = max(age); НЕПРАВИЛЬНО но это не будет работать, так как агрегатный max не может быть использован в предложении WHERE. (Это ограничение существует, потому что предложение WHERE определяет, какие строки будут включены в агрегатный расчет; п

Структуры данных

Изображение
В информатике структура данных - это формат организации, управления и хранения данных, обеспечивающий эффективный доступ и модификацию. Точнее говоря, структура данных - это совокупность значений данных, отношений между ними и функций или операций, которые можно применять к данным. Использование Структуры данных служат основой для абстрактных типов данных (ADT, abstract data types). ADT определяет логическую форму типа данных. Структура данных реализует физическую форму типа данных. Различные типы структур данных подходят для различных типов приложений, а некоторые являются высокоспециализированными для конкретных задач. Например, реляционные базы данных обычно используют индексы B-дерева для извлечения данных, в то время как реализации компилятора обычно используют хэш-таблицы для поиска идентификаторов. Структуры данных предоставляют средства для эффективного управления большими объемами данных для таких применений, как большие базы данных и службы индексирования в Интернете. Ка

Индекс базы данных: типы индексов

Изображение
Типы индексов Растровый индекс (bitmap index) Растровый индекс - это особый вид индексации, который хранит большую часть своих данных в виде битовых массивов (bitmaps) и отвечает на большинство запросов, выполняя побитовые логические операции с этими bitmaps. Наиболее часто используемые индексы, такие как B+ деревья, наиболее эффективны, если значения, которые они индексируют, не повторяются или повторяются небольшое количество раз. Напротив, растровый индекс предназначен для случаев, когда значения переменной повторяются очень часто. Например, поле пола в базе данных клиентов обычно содержит не более трех различных значений: мужское, женское или неизвестное (не записано). Для таких переменных растровый индекс может иметь значительное преимущество в производительности по сравнению с обычно используемыми деревьями. Плотный индекс (dense index) Плотный индекс в базах данных - это файл с парами ключей и указателей для каждой записи в файле данных. Каждый ключ в этом файле связан с опр

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

Изображение
Индексная архитектура и методы индексирования Некластерированный индекс Данные представлены в произвольном порядке, но логический порядок определяется индексом. Строки данных могут быть распределены по всей таблице независимо от значения индексированного столбца или выражения. Некластеризованное дерево индексов содержит ключи индекса в отсортированном порядке, причем конечный уровень индекса содержит указатель на запись (страница и номер строки на странице данных в механизмах, организованных по страницам; смещение строк в механизмах, организованных по файлам). В некластеризованном индексе Физический порядок строк не совпадает с порядком индекса. Индексированные столбцы обычно представляют собой столбцы не первичного ключа, используемые в предложениях JOIN, WHERE и ORDER BY. В таблице базы данных может быть несколько некластеризованных индексов. Кластерный индекс Кластеризация изменяет блок данных в определенном отдельном порядке, чтобы соответствовать индексу, в результате че

Индекс базы данных

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

SQL задача: найти записи, в которых значение столбца встречается по крайней мере N раз

В данном посте рассмотрим варианты решения SQL задачи: найти записи, в которых значение столбца встречается по крайней мере N раз . Для решения задачи будем использовать GROUP BY и HAVING в трех различных вариантах: EXISTS, JOIN, IN. Для примера будем использовать простую таблицу Names: CREATE TABLE Names( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(100) NOT NULL, PRIMARY KEY (`id`) ); Будем искать записи в таблицы Names где одинаковые значения столбца name встречаются более 3 раз. Решение с помощью EXISTS . По моим замерам выполняющееся с наибольшей скоростью. SELECT a.* FROM Names a WHERE EXISTS (SELECT NULL FROM Names c WHERE c.name = a.name GROUP BY c.name HAVING COUNT(*) > 3); Решение с помощью JOIN . По моим замерам выполняющееся с меньшей скоростью, чем решение с EXISTS. SELECT a.* FROM Names a JOIN (SELECT c.name FROM Names c GROUP BY c.name HAVING COUNT(*) > 3) b ON b.

Что такое gRPC

Изображение
В этом посте представлены gRPC и protocol buffers . gRPC может использовать protocol buffers как в качестве языка определения интерфейса (IDL), так и в качестве основного формата обмена сообщениями. В gRPC клиентское приложение может напрямую вызывать методы серверного приложения на другом компьютере, как если бы это был локальный объект, что упрощает создание распределенных приложений и служб. Как и во многих системах RPC, gRPC основан на идее определения службы, определения методов, которые можно вызывать удаленно, с их параметрами и типами возвращаемых данных. На своей стороне сервер реализует этот интерфейс и запускает сервер gRPC для обработки клиентских вызовов. На стороне клиента у есть stub (в некоторых языках называемая просто клиентом), которая предоставляет те же методы, что и сервер. Клиенты и серверы gRPC могут работать и общаться друг с другом в различных средах - от серверов внутри Google до вашего рабочего стола - и могут быть написаны на любом из поддерживаемых язык

gRPC

Изображение
gRPC - это современная высокопроизводительная среда RPC с открытым исходным кодом, которая может работать в любой среде. Она может эффективно соединять службы внутри и между центрами обработки данных с помощью подключаемой поддержки для балансировки нагрузки, трассировки, проверки работоспособности и аутентификации. Она также применима в последней миле распределенных вычислений для подключения устройств, мобильных приложений и браузеров к внутренним службам. Основные сценарии использования: Эффективное подключение сервисов полиглотов в микросервисной архитектуре Подключение мобильных устройств, клиентов браузера к бэкенд-сервисам Генерация эффективных клиентских библиотек Основные функции, которые делают его потрясающим: Идиоматические клиентские библиотеки на 10 языках Высокоэффективный на проводе и с простой структурой определения сервиса Двунаправленная потоковая передача с использованием транспорта на основе http/2 Подключаемая аутентификация, трассировка, балансировка

Принципы SOLID

Изображение
В объектно-ориентированном компьютерном программировании SOLID является мнемонической аббревиатурой для пяти принципов проектирования, предназначенных для того, чтобы сделать дизайн программного обеспечения более понятным, гибким и обслуживаемым. Это не связано с принципами проектирования программного обеспечения GRASP. Эти принципы являются подмножеством многих принципов, продвигаемых американским инженером-программистом и инструктором Робертом К. Мартином. Хотя принципы SOLID применимы к любому объектно-ориентированному проектированию, они также могут сформировать основную философию для таких методологий, как гибкая разработка (agile) или адаптивная разработка программного обеспечения. Теория принципов SOLID была введена Мартином в его работе 2000 "Принципы проектирования и шаблоны проектирования", хотя аббревиатура SOLID была введена позже Майклом Фезерсом. Концепции 1. S ingle responsibility principle - Принцип единой ответственности Класс должен нести только одну отв

PostgreSQL - open source база данных

Изображение
PostgreSQL , также известный как Postgres, представляет собой бесплатную систему управления реляционными базами данных (RDBMS) с открытым исходным кодом, подчеркивающую расширяемость и соответствие техническим стандартам. Он предназначен для обработки целого ряда рабочих нагрузок, от отдельных компьютеров до хранилищ данных или веб-служб со многими одновременными пользователями. Это база данных по умолчанию для MacOS Server, а также доступна для Linux, FreeBSD, OpenBSD и Windows. PostgreSQL предоставляет транзакции со свойствами Atomicity, Consistency, Isolation, Durability (ACID), автоматически обновляемыми представлениями, материализованными представлениями, триггерами, внешними ключами и хранимыми процедурами. PostgreSQL разработан PostgreSQL Global Development Group, группой, состоящей из множества компаний и отдельных участников. Имя Разработчики PostgreSQL объявляют PostgreSQL как /ˈpoʊstɡrɛs ˌkjuː ˈɛl/. Он сокращен как Postgres из-за повсеместной поддержки стандарта SQL среди