Нотатки про програмування, музику, подорожі та плівку
Про мене  •  Список нотаток  •  Плівка

Пізніше Ctrl + ↑

Изучение SQL: EXCEPT и INTERSECT

EXCEPT

С помощью данной команды можно найти разницу двух выборок.
Результатом будут строки первой таблицы, которых нету во второй.

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

SELECT Name, SecondName
FROM Contact
EXCEPT
SELECT Name, SecondName
FROM Employee

INTERSECT

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

Выведем контакты, которые являются нашими сотрудниками.

SELECT Name, SecondName
FROM Contact
INTERSECT
SELECT Name, SecondName
FROM Employee

Изучение SQL: UNION

Оператор UNION позволяет соединить две таблицы. Но в отличие от inner/outer join объединения соединяют не столбцы разных таблиц, а два однотипных набора в один.

Также должно совпадать количество колонок и их тип, в противном случае будет ошибка.

Пример:

SELECT Name, Age 
FROM Contact
UNION 
SELECT Name, Age 
FROM Employees

Также мы можем отсортировать выборку. Для этого нужно ориентироваться на имена колонок из первой выборки.

SELECT Name, Age as FirstAge
FROM Contact
UNION 
SELECT Name, Age as SecondAge 
FROM Employees
ORDER BY FirstAge

Если при объединении буду дубли данных, они не будут отображаться, для того чтобы их отобразить, нужно использовать UNION ALL.

Обзор пленки

Kodak ColorPlus 200

Самая дешевая и простая пленка, отлично подходит для того чтобы попробовать фотографию.
Лучше всего снимает при дневном свете, а в помещении со вспышкой.
Цена: ~100 грн.

Примеры:

Kodak Portra Professional 400

Одна из лучших пленок Kodak. Специально созданная для портретной съемки. Но она также отлично подходит и для всех остальных жанров фотографии. ISO 400 позволяет снимать в разных условиях освещенности.
Цена: ~300-350 грн.

Примеры:

Kodak Ultramax 400

Достаточно простая и хорошая пленка, подходит почти для все случаев. Обладает точной передачей тонов кожи.
Цена: ~180-220 грн.

Fujifilm Fujicolor C200

Очень хорошая базовая пленка, достаточно универсальная и дешевая.
Цена: ~120 грн.

Kodak TRI-X 400/35

Самая популярная черно-белая профессиональная пленка.
Цена: ~280 грн.

Амстердам, Апрель 2019

Наконец-то моя давняя и заветная мечта воплотилась в жизнь. Хотя планирование этой поездки и было трудоёмким делом, но компаньоны в лице друзей сделали её незабываемой.

После долгих поисков жилья, мы решили поселиться в The Student Hotel. И не прогадали. Этот отель — идеальное место для любителей эстетики «американского кампуса». Интерьер номеров молодёжный, но в то же время безумно уютный и расслабленный. Благодаря такой атмосфере, студенческие годы вновь станут явью, даже если вам немного за 20 :)

В свободное от прогулок по городу время можно попытать удачу в пин-понг, выпить в баре или посмотреть фильм, устроившись на удобном диване со скромным названием «Bed Talks». И да, коворкинг для трудоголиков никто не отменял.

Система общественного транспорта в Амстере очень развита. Ветки метро, трамваев и поездов буквально переплетаются, существенно экономя этим время. Но покупка билетов на вышеупомянутый транспорт — дело не для слабаков.

Купить билеты на метро/трамвай/автобус можно в сети книжных магазинов Ako. Билеты на электричку удобнее всего приобрести онлайн на сайте https://www.ns.nl/en. Пользуйтесь, не благодарите.

Также мне посчастливилось любоваться улицами Амстердама через объектив плёночной камеры, тем самым реализовав многолетнее увлечение. В этом мне помог Nikon N65 и 4 вида плёнки, которая уже успела превратиться в эти атмосферные снимки.

  1. Бар в отеле.
  1. Каналы.
  1. Дом в городе Лиссе, недалеко от тюльпановых полей.
  1. Еще каналы с окна трамвая.
  1. В Амстердаме можно заметить большое количество странных и старых автомобилей.
  1. Музей Ван Гога.
  1. Кафешка в Лиссе.
  1. Ночные улицы Амстердама.
  1. Разводной мост через канал.
  1. И еще немного каналов.
  1. Вид из онка готеля.
  1. Улица заполненная светом.
  1. Моего паспорта нет, так как был занят фото :-)
  1. Люди отдыхают на берегу.
  1. Улица красных фонарей.

Изучение SQL: Операторы GROUP BY и HAVING

Для группировки данных существуют 2 ключевых слова: GROUP BY и HAVING.

GROUP BY

Оператор GROUP BY определяет, как строки будут группироваться.

Например сгруппировать контакты по стране:

SELECT country, Count(*) AS UserByCountryCount
FROM Contacts
GROUP BY country

HAVING

Используется для фильтрации групп.

Например, найдем страны в которых больше 100 пользователей:

SELECT country, COUNT(*) AS UserByCountryCount
FROM Contacts
GROUP BY country
HAVING COUNT(*) > 100

Шардинг

Шардинг (иногда шардирование) — это другая техника масштабирования работы с данными. Суть его в разделении (партиционирование) базы данных на отдельные части так, чтобы каждую из них можно было вынести на отдельный сервер. Этот процесс зависит от структуры базы данных и выполняется прямо в приложении в отличие от репликации

Вертикальный шардинг

Вертикальный шардинг — это выделение таблицы или группы таблиц на отдельный сервер. Например, в приложении есть такие таблицы:

  • users — данные пользователей
  • photos — фотографии пользователей
  • albums — альбомы пользователей

Таблицу users Вы оставляете на одном сервере, а таблицы photos и albums переносите на другой. В таком случае в приложении Вам необходимо будет использовать соответствующее соединение для работы с каждой таблицей

Горизонтальный шардинг

Горизонтальный шардинг — это разделение одной таблицы на разные сервера. Это необходимо использовать для огромных таблиц, которые не умещаются на одном сервере. Разделение таблицы на куски делается по такому принципу:

  • На нескольких серверах создается одна и та же таблица (только структура, без данных).
  • В приложении выбирается условие, по которому будет определяться нужное соединение (например, четные на один сервер, а нечетные — на другой).
  • Перед каждым обращением к таблице происходит выбор нужного соединения.

Совместное использование

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

Key-value базы данных

Следует отметить, что большинство Key-value баз данных поддерживает шардинг на уровне платформы. Например, Memcache. В таком случае, Вы просто указываете набор серверов для соединения, а платформа сделает все остальное

Итог

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

P.S.

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

Ссылки

  1. Вертикальный шардинг
  2. Шардинг и репликация

Репликация данных

Репликация — одна из техник масштабирования баз данных. Состоит эта техника в том, что данные с одного сервера базы данных постоянно копируются (реплицируются) на один или несколько других. Для приложения появляется возможность использовать не один сервер для обработки всех запросов, а несколько. Таким образом появляется возможность распределить нагрузку с одного сервера на несколько.

Существует два основных подхода при работе с репликацией данных:

  1. Репликация Master-Slave;
  2. Репликация Master-Master.

Master-Slave репликация

В этом подходе выделяется один основной сервер базы данных, который называется Мастером. На нем происходят все изменения в данных (любые запросы INSERT/UPDATE/DELETE). Слейв сервер постоянно копирует все изменения с Мастера. С приложения на Слейв сервер отправляются запросы чтения данных. Таким образом Мастер сервер отвечает за изменения данных, а Слейв за чтение.

Несколько Слейвов

Преимущество этого типа репликации в том, что Вы можете использовать более одного Слейва. Обычно следует использовать не более 20 Слейв серверов при работе с одним Мастером.
Тогда из приложения выбирает случайным образом один из Слейвов для обработки запросов, тем самым распределяя нагрузку на БД.

Выход из строя

При выходе из строя Слейва, достаточно просто переключить все приложение на работу с Мастером. После этого восстановить репликацию на Слейве и снова его запустить.
Если выходит из строя Мастер, нужно переключить все операции (и чтения и записи) на Слейв. Таким образом он станет новым Мастером. После восстановления старого Мастера, настроить на нем реплику, и он станет новым Слейвом.

Master-Master репликация

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

«Ручная» репликация

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

Итог

Репликация используется в большей мере для резервирования баз данных и в меньшей для масштабирования. Master-Slave репликация удобна для распределения запросов чтения по нескольким серверам. Подход ручной репликации позволит использовать преимущества репликации для технологий, которые ее не поддерживают. Зачастую репликация используется вместе с шардингом при решении вопросов масштабирования.

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

PowerShell: создание Credentials.

Для того чтобы работать с авторизацией пользователя в powershell существую следующие понятия:
String — простая строка, в ней можно сохранять пароль, но не желательно, так как она хранится в памяти в открытом виде.
System.Security.SecureString — выглядит как обычная строка, но она зашифрована. Она использует «обратимое» шифрование, так что мы в любой момент можем декодировать пароль.
System.Management.Automation.PSCredential — класс, который содержит в себе логин и зашифрованный пароль. Данный тип есть почти у каждой команды, которая поддерживает авторизацию.

Создание SecureString

# Чтение из консоли
$SecurePassword = Read-Host -Prompt "Enter password" -AsSecureString

# Чтение из переменной
$PlainPassword = "P@ssw0rd"
$SecurePassword = $PlainPassword | ConvertTo-SecureString -AsPlainText -Force

Создание PSCredentials

$UserName = "Domain\User"
$Credentials = New-Object System.Management.Automation.PSCredential `
     -ArgumentList $UserName, $SecurePassword

Получение пароля из PSCredentials

$PlainPassword = $Credentials.GetNetworkCredential().Password

Получение пароля из SecureString

Можно создать PSCredentials и получить из них пароль, но есть и другой способ:

$BSTR = `
    [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecurePassword)
$PlainPassword = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR)

Лучшие подходы

  • Старайтесь не спрашивать у пользователя пароль, а по максимуму используйте Windows authentication.
  • Никогда не держите пароли в чистом виде, только в SecureString или PSCredentials
  • Если вам нужно запросить учетные данные у пользователя, используйте командлет Get-Credential. Он использует стандартную функцию Windows для последовательного и безопасного получения пароля без сохранения его в памяти в виде открытого текста.

Мои расширения в Google Chrome

Решил поделиться расширениями для браузера, которыми пользуюсь каждый день.

  1. Marinara: Ассистент Pomodoro — очень прикольный трекер помидорок. Можно смотреть отчеты и графики применения данной техники.
  2. Instapaper — быстрое добавление статей в Instapaper.
  3. Google Переводчик — так как читаю большое количество статей на английском языке, то данное расширение часто помогает понять смысл слова не переходя на другую вкладку с переводчиком.
  4. Follow this feed by Feedly — ищет на сайте возможность подписаться на обновления с помощью RSS
  5. uBlock Origin — как по мне самый лучший блокировщик рекламы, который можно заточить под себя. Оставлю здесь ссылку на настройки, которые позволяют убрать надоедливые окна-консультанты на сайтах
  6. JSONview — наверное самое популярное расширение для просмотра JSON в браузере.
  7. Trelabels for Trello — красивое отображение тегов на карточках в Trello.
  8. OneTab — мега крутое расширение которое я советую поставить прямо сейчас. Оно позволяет закрыть все открытые вкладки и сохранить их URL на одной единственной. Помогает разгрузить браузер и оперативку.
  9. Octotree — добавляет на github древовидное представление репозитория, как в IDE.
Раніше Ctrl + ↓