Зачем делать подтаблицу подбазы данных?
Когда объем данных в базе данных в определенной степени слишком велик, мы можем использовать подбазу данных и подтаблицу. Итак, по какому принципу и каким методом разбивать, об этом и пойдет речь в этой статье.
Зачем делать подтаблицу подбазы данных? Когда база данных в определенной степени велика, мы используем оптимизированное оборудование и оптимизируем структуру таблицы.
Что такое подтаблица подбиблиотеки?
С быстрым развитием бизнеса компании объем данных в базе данных резко возрос, а скорость доступа также снизилась, и оптимизация неизбежна.
Проанализируйте, где проблема? Сами по себе реляционные данные относительно легко могут стать узким местом в системе, а объем памяти одной машины, количество подключений и производительность обработки ограничены. Когда объем данных одной таблицы достигает 1000W или 100G из-за большого количества измерений запроса, даже если добавляется подчиненная база данных, оптимизируются индексы и выполняется множество операций, производительность все равно сильно снижается.
метод первый:
Улучшение возможностей обработки данных за счет улучшения аппаратных возможностей сервера, таких как увеличение емкости хранилища, процессора и т. д., требует больших затрат, и если узким местом является сама MySQL, усовершенствование аппаратного обеспечения также очень ограничено.
Способ второй:
Рассредоточьте данные в разных базах данных, чтобы уменьшить объем данных одной базы данных, чтобы облегчить проблемы с производительностью одной базы данных, тем самым достигнув цели повышения производительности базы данных.
Например, база данных электронной коммерции разделена на несколько независимых баз данных, а большая таблица также разделена на несколько небольших таблиц, чтобы решить проблему производительности базы данных. Это как положить яйца в несколько корзин.
Таким образом, подтаблица подбазы данных предназначена для решения проблемы снижения производительности базы данных из-за чрезмерного объема данных.Исходная независимая база данных разделена на несколько баз данных, а большая таблица базы данных разделена на несколько таблиц данных, так что одна база данных , одиночные данные Объем данных в таблице становится меньше, чтобы достичь цели повышения производительности базы данных.
Путь подбиблиотеки подтаблицы
Мы взяли за основу электронную коммерцию, и теперь есть три таблицы, а именно таблица продавца, таблица продукта и таблица магазина.
вертикальный стол
Когда мы обычно посещаем веб-сайты электронной коммерции, такие как Taobao, страница списка поиска отображает ключевую информацию о продукте, а страница, на которую мы нажимаем, отображает подробную информацию о продукте. Эта большая таблица с информацией о продукте содержит множество полей, поэтому мы классифицируем поля, обычно используемые в информации о продукте, в одну таблицу, а поля, которые обычно не используются в информации о продукте, — в одну таблицу.
垂直分表的定义:将一个表按照字段分为多表,每个表里面都存储其中一部分字段。
он принес提升
Да:
1. Чтобы избежать скремблирования операций ввода-вывода и уменьшить вероятность блокировки таблицы, пользователи, которые просматривают детали и просматривают информацию о продукте, не влияют друг на друга.
2. В полной мере используйте эффективность операций с популярными данными (базовая информация о товарах), и высокая эффективность операций с информацией о товарах не будет снижаться из-за неэффективности описаний товаров.
Почему большие поля неэффективны, например, информация описания таблицы товаров? : во-первых, из-за большого объема самих данных, чтение занимает больше времени; во-вторых, охват страниц, страница является единицей хранения базы данных, многие операции поиска и позиционирования основаны на страницах, и чем больше строк данных в одна страница, тем больше Общая производительность базы данных лучше, но большие поля занимают много места, а количество строк, хранящихся на одной странице, невелико, поэтому эффективность ввода-вывода низкая; в-третьих, загружает базу данных данные в память в единицах поведения, так что поля в таблице короче и скорость доступа низкая.После доставки память может загружать больше данных, частота попаданий выше, дисковый ввод-вывод уменьшается, а производительность базы данных улучшается.
Вообще говоря, когда объем данных в таблице велик, вы можете разделить таблицу по полям, разделить популярные и непопулярные поля и поместить их в разные таблицы, чтобы избежать конкуренции за ввод-вывод.
вертикальная библиотека
Производительность шардирования вертикальных таблиц несколько улучшилась, но она пока не соответствует требованиям, да и места на диске не хватает, т.к. БД всегда ограничена одним сервером, а шардирование вертикальных таблиц в библиотеке только решает проблему, что объем данных одной таблицы слишком велик.Проблема в том, что таблицы не распределены по разным серверам, поэтому каждая таблица по-прежнему конкурирует за ЦП, память, сетевой ввод-вывод, диск и другие физические ресурсы одного и того же физическая машина.
Таким образом, мы можем разделить таблицу продавца, таблицу товаров и таблицу магазинов на разные серверы.
垂直分库是指按照业务将表进行分类,分布在不同的数据库中,每个库可以放在不同的服务器上,他的核心就是专库专用。
Горизонтальная подбиблиотека
После вертикального разделения базы данных проблема производительности базы данных была в определенной степени решена, но с ростом объема бизнеса объем данных хранения товарных штанов превысил оценку. Грубо подсчитано, что в настоящее время существует 8w магазинов, и каждый магазин имеет в среднем 150 товаров разных спецификаций.Помимо роста, количество товаров должно оцениваться в 1500w, а товарная библиотека - это ресурс, к которому обращаются очень часто, и один сервер больше не может его поддерживать. На данный момент, как оптимизировать.
Попробуйте горизонтальную подбазу данных и поместите подтаблицы информации о продуктах с идентификаторами магазинов в виде нечетных чисел и идентификаторами магазинов в виде четных чисел в двух базах данных.
Горизонтальное секционирование базы данных заключается в разделении данных одной и той же таблицы на разные базы данных в соответствии с определенными правилами, причем каждая база данных может быть размещена на другом сервере.
он принес提升
Да:
Это устраняет узкие места в производительности, связанные с большими данными в одной базе данных и высокой степенью параллелизма.
Повышение стабильности и доступности системы. (Стабильность отражается в уменьшении конфликтов ввода-вывода, уменьшении блокировок и доступности библиотеки, которая имеет проблемы и частично доступна)
горизонтальная подтаблица
Горизонтальная подтаблица предназначена для разделения данных одной и той же таблицы на несколько таблиц в соответствии с определенными правилами в одной базе данных. (разбиение строк данных без изменения структуры таблицы)
он принес提升
:
Оптимизация проблем с производительностью, вызванных большим объемом данных в одной таблице.
Избегайте конкуренции за ввод-вывод и уменьшите вероятность блокировки таблицы.
резюме:
В этом резюме представлены различные способы подбиблиотеки и подтаблицы: вертикальная подтаблица, вертикальная подбиблиотека, горизонтальная подбиблиотека и горизонтальная подтаблица.
Вертикальное разделение таблицы: вы можете разделить поля широкой таблицы на несколько таблиц в зависимости от частоты доступа и того, являются ли они большими полями.Это может не только сделать бизнес понятным, но и повысить производительность.После разделения старайтесь избегать это с точки зрения бизнеса.Совместное расследование, в противном случае производительность перевешивает выгоды.
Вертикальная подбиблиотека: несколько таблиц могут быть классифицированы в соответствии с деловыми связями и храниться в разных библиотеках.Эти библиотеки могут быть распределены на разных серверах, так что давление доступа загружается несколькими серверами, что значительно повышает производительность, а коллеги могут улучшить общее Ясность бизнеса, различные предприятия могут настраивать решения по оптимизации в соответствии со своими условиями, но ему необходимо решить все сложные проблемы, вызванные кросс-базой данных.
Горизонтальная подбаза данных: данные таблицы (по строке данных) могут быть разделены на несколько разных баз данных, каждая база данных имеет только часть данных этой таблицы, и эти библиотеки могут быть распределены по разным серверам, так что давление доступа зависит от загрузки нескольких серверов и значительного повышения производительности, ему нужно не только решить все сложные проблемы, вызванные кросс-базой, но и решить проблему маршрутизации данных (проблема маршрутизации данных будет представлена позже).
Горизонтальная подтаблица: вы можете разделить данные таблицы (по строке данных) на несколько таблиц в одной базе данных, каждая таблица содержит только часть данных этой таблицы, это может немного улучшить производительность, это только дополнение к горизонтальной оптимизации подбазы данных.
Вообще говоря, на этапе проектирования системы решения для вертикальной подбазы данных и вертикальной подтаблицы должны быть определены в соответствии с теснотой бизнес-связи.Когда объем данных и давление доступа не особенно велики, сначала考虑缓存,读写分离,索引技术
Если объем данных чрезвычайно велик и продолжает расти, рассмотрите решение с горизонтальной подбазой данных и горизонтальной подтаблицей.
Проблемы, вызванные подбиблиотекой и подтаблицей
Подбаза данных и подтаблица могут эффективно устранить узкие места и нагрузку на производительность, вызванные одной машиной и одной базой данных, преодолеть узкие места сетевого ввода-вывода, аппаратных ресурсов и количества подключений, но также могут вызвать некоторые проблемы.
Проблемы согласованности транзакций
Поскольку подбаза данных и подтаблица распределяют данные по разным библиотекам или даже по разным серверам, это неизбежно приведет к проблемам с распределенными транзакциями.
Например, запрос должен сначала запрашивать базу данных A, а затем запрашивать базу данных B. Эти два объекта относятся к одной и той же транзакции, и несколько баз данных вызовут проблемы с распределенными транзакциями.
Корреляционный запрос между узлами
До отсутствия подбазы данных мы можем легко выполнить связанный запрос двух таблиц, но после разделения базы данных, если две таблицы не находятся в одной базе данных или даже на одном сервере, связанный запрос не может быть выполнен. .
Исходный запрос ассоциации можно разделить на два запроса: результат первого запроса находит идентификатор связанных данных, затем инициирует второй запрос для получения связанных данных в соответствии с идентификатором и, наконец, собирает полученные данные.
Пейджинг по узлам, функция сортировки
При выполнении запросов между узлами и несколькими базами данных проблема ограничения подкачки и упорядочения усложняется: необходимо сначала отсортировать и вернуть данные в разных узлах сегментов, а затем суммировать и суммировать наборы результатов, возвращаемые разными сегментами. снова.
избегание первичного ключа
В среде подбазы данных и подтаблицы, поскольку данные в таблице одновременно существуют в разных базах данных, самоувеличение значения первичного ключа будет бесполезным, а идентификатор, сгенерированный определенной базой данных, не может быть гарантирован. быть глобально уникальным. Следовательно, необходимо разработать глобальный первичный ключ отдельно, чтобы решить проблему дублирования первичного ключа между базами данных.
общественный стол
В сценариях практического применения таблицы параметров, таблицы словаря данных и т. д. являются зависимыми таблицами с небольшим объемом данных и небольшим количеством изменений и являются зависимыми таблицами для часто повторяющихся совместных запросов, но нет необходимости в подтаблицах подбазы данных. , такие как таблицы географических регионов, также относятся к этому типу.
Вы можете сохранить копию таблицы этого типа в каждой базе данных, и все операции обновления общей таблицы одновременно отправляются в подбазу данных для выполнения.
Заключение (выделено)
Как показано в заголовке, мы не можем разделить базы данных и таблицы ради подбазы данных и подтаблицы Прежде всего, нам нужно знать, что рождение подбазы данных и подтаблицы вызвано производительностью узкое место базы данных, то есть, если нет узкого места в производительности, нет необходимости использовать подбазу данных и подтаблицу.Таблица, в конце концов, технология для лучшего обслуживания производительности. Во-вторых, подбаза данных и подтаблица также приносят другие проблемы, а система становится раздутой и неудобной, когда в ней нет необходимости.
То есть все держится на бизнесе, и мы не можем слепо гнаться за технологическими инновациями.
Наконец
Подписывайтесь на меня и получайте много учебных материалов.