<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блоги: заметки с тегом бази даних</title>
<link>https://blogengine.me/blogs/tags/bazi-danih/</link>
<description>Автоматически собираемая лента заметок, написанных в блогах на Эгее</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.0 (v4079e)</generator>

<itunes:subtitle>Автоматически собираемая лента заметок, написанных в блогах на Эгее</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>GCP: Databases</title>
<guid isPermaLink="false">119852</guid>
<link>https://stefaniuk.website/all/gcp-databases/</link>
<pubDate>Thu, 15 Oct 2020 01:24:00 +0500</pubDate>
<author>Bohdan Stefaniuk</author>
<comments>https://stefaniuk.website/all/gcp-databases/</comments>
<description>
&lt;p&gt;&lt;a href="https://stefaniuk.website/"&gt;Bohdan Stefaniuk&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Google Cloud Platform предоставляет большой выбор разных способов хранить данные. Некоторые из них построены на базе существующих продуктов, другие — собственная разработка гугла.&lt;/p&gt;
&lt;p&gt;Для начала нужно понять, что такое managed databases. Это услуга по настройке и администрированию баз данных. Облачный провайдер сам отвечает за работу сервера, установку патчей безопасности, доступность сервиса. Для того чтобы достичь такого же результата с помощью self hosted, нужно иметь в штате специалиста, который умеет администрировать сервера, закупить железо и подготовить инфраструктуру. В случае с managed databases платишь только за то количество ресурсов, которое используешь.&lt;/p&gt;
&lt;h2&gt;Cloud SQL&lt;/h2&gt;
&lt;p&gt;Cloud SQL это классический managed database сервис. Он позволяет развернуть 3 самые популярные базы данных. Такие как:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;MySQL (5.6, 5.7 и 8.0)&lt;/li&gt;
&lt;li&gt;PostgreSQL (9.6, 10, 11, 12)&lt;/li&gt;
&lt;li&gt;MS SQL Server 2017&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Также гугл гарантирует доступность базы данных на уровне 99,95%. Дополнительно получаем автоматическую репликацию и бекапы.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ограничения&lt;/b&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;30 Tb хранилища&lt;/li&gt;
&lt;li&gt;60,000 IOPS&lt;/li&gt;
&lt;li&gt;624 Gb RAM&lt;/li&gt;
&lt;li&gt;Реплики БД только для чтения&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Cloud Spanner&lt;/h2&gt;
&lt;p&gt;Spanner — реляционная база данных, разработка Google. Spanner позиционирует себя как горизонтально масштабируемая база данных, способна хранить петабайты информации, гарантирует строгую согласованность данных. А также доступность 99.999%.&lt;/p&gt;
&lt;p&gt;По своей природе Cloud Spanner это распределённая база данных с автоматическим шардированием и репликацией, которые скрыты под капотом. Чтобы создать БД, нужно выбрать локацию (region или multi-region) и количество нод. Количество нод влияет на размер данных, которые кластер способен хранить и его доступность. Каждая нода может обслуживать до 2 Тб данных.&lt;/p&gt;
&lt;p&gt;Пример кластера, который состоит из 4 нод. Каждая зона содержит полную копию базы данных и 4 процесса, которые обслуживают эти данные.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://stefaniuk.website/pictures/gcp-db-regional-instance-config.png" width="734" height="365" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Гугл советует иметь минимум 3 ноды для прода. Но есть один нюанс — цена. Cloud Spanner очень дорогое решение, созданное для работы с огромным количеством данных. За 1 петабайт данных прийдется отдать ......... 1 645 568 $ ......... в месяц.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://stefaniuk.website/pictures/gcp-db-spanner-price.png" width="420" height="327" alt="" /&gt;
&lt;/div&gt;
&lt;h2&gt;Cloud Big Table&lt;/h2&gt;
&lt;p&gt;Столбцовая NoSQL база данных, которая масштабируется до миллиарда строк и тысяч колонок. Способна хранить петабайты информации.&lt;/p&gt;
&lt;p&gt;Основная фича — наличие интерфейса HBase и нативная поддержка Hadoop. Это позволяет перенести данные с собственного кластера в Big Table без каких либо изменений. Big Table идеально подойдёт для очень быстрой записи и чтения, а также хранения данных типа ключ/значения, размер которых не превышает 10 Мб.&lt;/p&gt;
&lt;p&gt;Данные внутри базы данных лежат в огромных таблицах. Грубо говоря, таблица в HBase представлена в виде огромного словаря словарей. Таблица состоит из строк, каждая из которых обычно описывает одну сущность, и столбцов, которые содержат отдельные значения для каждой строки. Каждая строка индексируется одним ключом, а столбцы, которые связаны друг с другом, обычно группируются в семейство столбцов.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://stefaniuk.website/pictures/gcp-db-big-table.png" width="658" height="372" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Для более глубокого ознакомления советую прочитать главу «HBase» из книги «7 баз данных за 7 недель». Также советую ознакомится с &lt;a href="https://cloud.google.com/bigtable/docs/overview"&gt;официальной документацией&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Cloud Firestore&lt;/h2&gt;
&lt;p&gt;Cloud Firestore — это полностью управляемая,документоориентированная serverless база данных, предназначена для разработки serverless приложений. Структура данных сильно напоминает такую в MongoDB.&lt;/p&gt;
&lt;p&gt;Firestore поддерживает офлайн режим и живую синхронизацию. С помощью этих фич удобно строить приложения, которые предназначены для совместного использования, например, Google Docs или другие похожие варианты.&lt;/p&gt;
&lt;p&gt;А также она пришла на замену предыдущего сервиса — Cloud Datastore. В 2021 году гугл обещает автоматически всех мигрировать с Datastore на Firestore. Это возможно благодаря обратной совместировать с Datastore API.&lt;/p&gt;
&lt;p&gt;Firestore имеет два режива работы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt; Datastore mode&lt;/b&gt;, создан для серверных приложений, совместим с Cloud Datastore. Поддерживает согласованность в конечном счёте.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Native mode&lt;/b&gt;, создан для веб и мобильных платформ. Поддерживает строгую согласованость и все основные фичи Firestore.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Детальнее с режимами можно ознакомится в &lt;a href="https://cloud.google.com/firestore/docs/firestore-or-datastore"&gt;официальной документации&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Cloud Memorystore&lt;/h2&gt;
&lt;p&gt;Управляемый in-memory сервис, построенный на базе Redis и memcached.&lt;/p&gt;
&lt;h2&gt;Сравнение&lt;/h2&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://stefaniuk.website/pictures/gcp-db-compare.png" width="961" height="495" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Шардинг</title>
<guid isPermaLink="false">119854</guid>
<link>https://stefaniuk.website/all/sharding/</link>
<pubDate>Fri, 05 Apr 2019 02:26:34 +0500</pubDate>
<author>Bohdan Stefaniuk</author>
<comments>https://stefaniuk.website/all/sharding/</comments>
<description>
&lt;p&gt;&lt;a href="https://stefaniuk.website/"&gt;Bohdan Stefaniuk&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Шардинг (иногда шардирование) — это другая техника масштабирования работы с данными. Суть его в разделении (партиционирование) базы данных на отдельные части так, чтобы каждую из них можно было вынести на отдельный сервер. Этот процесс зависит от структуры базы данных и выполняется прямо в приложении в отличие от репликации&lt;/p&gt;
&lt;h2&gt;Вертикальный шардинг&lt;/h2&gt;
&lt;p&gt;Вертикальный шардинг — это выделение таблицы или группы таблиц на отдельный сервер. Например, в приложении есть такие таблицы:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;i&gt;users&lt;/i&gt; — данные пользователей&lt;/li&gt;
&lt;li&gt;&lt;i&gt;photos&lt;/i&gt; — фотографии пользователей&lt;/li&gt;
&lt;li&gt;&lt;i&gt;albums&lt;/i&gt; — альбомы пользователей&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Таблицу users Вы оставляете на одном сервере, а таблицы &lt;i&gt;photos&lt;/i&gt; и &lt;i&gt;albums&lt;/i&gt; переносите на другой. В таком случае в приложении Вам необходимо будет использовать соответствующее соединение для работы с каждой таблицей&lt;/p&gt;
&lt;h2&gt;Горизонтальный шардинг&lt;/h2&gt;
&lt;p&gt;Горизонтальный шардинг — это разделение одной таблицы на разные сервера. Это необходимо использовать для огромных таблиц, которые не умещаются на одном сервере. Разделение таблицы на куски делается по такому принципу:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;На нескольких серверах создается одна и та же таблица (только структура, без данных).&lt;/li&gt;
&lt;li&gt;В приложении выбирается условие, по которому будет определяться нужное соединение (например, четные на один сервер, а нечетные — на другой).&lt;/li&gt;
&lt;li&gt;Перед каждым обращением к таблице происходит выбор нужного соединения.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Совместное использование&lt;/h2&gt;
&lt;p&gt;Шардинг и репликация часто используются совместно. В нашем примере, мы могли бы использовать по два сервера на каждый шард таблицы&lt;/p&gt;
&lt;h2&gt;Key-value базы данных&lt;/h2&gt;
&lt;p&gt;Следует отметить, что большинство Key-value баз данных поддерживает шардинг на уровне платформы. Например, Memcache. В таком случае, Вы просто указываете набор серверов для соединения, а платформа сделает все остальное&lt;/p&gt;
&lt;h2&gt;Итог&lt;/h2&gt;
&lt;p&gt;Не следует применять технику шардинга ко всем таблицам. Правильный подход — это поэтапный процесс разделения растущих таблиц. Следует задумываться о горизонтальном шардинге, когда количество записей в одной таблице переходит за пределы от нескольких десятков миллионов до сотен миллионов.&lt;/p&gt;
&lt;h2&gt;P.S.&lt;/h2&gt;
&lt;p&gt;Помните, процесс масштабирования данных — это архитектурное решение, оно не связано с конкретной технологией. Не делайте ошибок наших отцов — не переезжайте с известной Вам технологии на новую из-за поддержки или не поддержки шардинга. Проблемы обычно связаны с архитектурой, а не конкретной базой данных&lt;/p&gt;
&lt;h2&gt;Ссылки&lt;/h2&gt;
&lt;ol start="1"&gt;
&lt;li&gt;&lt;a href="https://ruhighload.com/%D0%92%D0%B5%D1%80%D1%82%D0%B8%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9+%D1%88%D0%B0%D1%80%D0%B4%D0%B8%D0%BD%D0%B3"&gt;Вертикальный шардинг&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ruhighload.com/%D0%A8%D0%B0%D1%80%D0%B4%D0%B8%D0%BD%D0%B3+%D0%B8+%D1%80%D0%B5%D0%BF%D0%BB%D0%B8%D0%BA%D0%B0%D1%86%D0%B8%D1%8F"&gt;Шардинг и репликация&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
</description>
</item>

<item>
<title>Репликация данных</title>
<guid isPermaLink="false">119853</guid>
<link>https://stefaniuk.website/all/db-replication/</link>
<pubDate>Fri, 05 Apr 2019 02:23:42 +0500</pubDate>
<author>Bohdan Stefaniuk</author>
<comments>https://stefaniuk.website/all/db-replication/</comments>
<description>
&lt;p&gt;&lt;a href="https://stefaniuk.website/"&gt;Bohdan Stefaniuk&lt;/a&gt;:&lt;/p&gt;
&lt;p&gt;Репликация — одна из техник масштабирования баз данных. Состоит эта техника в том, что данные с одного сервера базы данных постоянно копируются (реплицируются) на один или несколько других. Для приложения появляется возможность использовать не один сервер для обработки всех запросов, а несколько. Таким образом появляется возможность распределить нагрузку с одного сервера на несколько.&lt;/p&gt;
&lt;p&gt;Существует два основных подхода при работе с репликацией данных:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;Репликация Master-Slave;&lt;/li&gt;
&lt;li&gt;Репликация Master-Master.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;Master-Slave репликация&lt;/h2&gt;
&lt;p&gt;В этом подходе выделяется один основной сервер базы данных, который называется Мастером. На нем происходят все изменения в данных (любые запросы INSERT/UPDATE/DELETE). Слейв сервер постоянно копирует все изменения с Мастера. С приложения на Слейв сервер отправляются запросы чтения данных. Таким образом Мастер сервер отвечает за изменения данных, а Слейв за чтение.&lt;/p&gt;
&lt;h2&gt;Несколько Слейвов&lt;/h2&gt;
&lt;p&gt;Преимущество этого типа репликации в том, что Вы можете использовать более одного Слейва. Обычно следует использовать не более 20 Слейв серверов при работе с одним Мастером.&lt;br /&gt;
Тогда из приложения выбирает случайным образом один из Слейвов для обработки запросов, тем самым распределяя нагрузку на БД.&lt;/p&gt;
&lt;h2&gt;Выход из строя&lt;/h2&gt;
&lt;p&gt;При выходе из строя Слейва, достаточно просто переключить все приложение на работу с Мастером. После этого восстановить репликацию на Слейве и снова его запустить.&lt;br /&gt;
Если выходит из строя Мастер, нужно переключить все операции (и чтения и записи) на Слейв. Таким образом он станет новым Мастером. После восстановления старого Мастера, настроить на нем реплику, и он станет новым Слейвом.&lt;/p&gt;
&lt;h2&gt;Master-Master репликация&lt;/h2&gt;
&lt;p&gt;В этой схеме, любой из серверов может использоваться как для чтения так и для записи.&lt;/p&gt;
&lt;h2&gt;«Ручная» репликация&lt;/h2&gt;
&lt;p&gt;Некоторые технологии вообще не имеют встроенной репликации. В таких случаях, следует использовать самостоятельную реализацию репликации. В самом простом случае, приложение будет дублировать все запросы сразу на несколько серверов базы данных.&lt;/p&gt;
&lt;h2&gt;Итог&lt;/h2&gt;
&lt;p&gt;Репликация используется в большей мере для резервирования баз данных и в меньшей для масштабирования. Master-Slave репликация удобна для распределения запросов чтения по нескольким серверам. Подход ручной репликации позволит использовать преимущества репликации для технологий, которые ее не поддерживают. Зачастую репликация используется вместе с шардингом при решении вопросов масштабирования.&lt;/p&gt;
&lt;p&gt;Следует отметить, что репликация сама по себе не очень удобный механизм масштабирования. Причиной тому — рассинхронизация данных и задержки в копировании с мастера на слейв. Зато это отличное средство для обеспечения отказоустойчивости. Вы всегда можете переключиться на слейв, если мастер ломается и наоборот. Чаще всего репликация используется совместно с шардингом именно из соображений надежности.&lt;/p&gt;
</description>
</item>


</channel>
</rss>