В предыдущей главе был описан алгоритм выбора подбазы данных и подтаблицы, в этой главе в основном обсуждается выбор технологии подбазы данных и подтаблицы.
Текст относится к предыдущей главе, если он упоминается ниже, вы можете нажатьСхема алгоритма и технология выбора подбазы и подтаблицы (1)
В основном рассказать
- Сравнение фреймворков
- sharding-jdbc, примеры реализации кода zdal, если вам нужен исходный код, вы можете просмотреть его позже
- Стратегия генерации первичного ключа Статьи можно читать по запросу
автор
Дзидзо Кельвин
Общественный номер: Кшитигарбха думает
общая основа
В дополнение к собственному JDBC, распространенными платформами подтаблиц онлайн-подбазы данных являются: Dangdang шардинг-jdbc alibaba.cobar (разработан подразделением Alibaba (B2B)) MyCAT (разработан на основе продукта Cobar с открытым исходным кодом от Alibaba) Ant Financial ZDAL (с открытым исходным кодом) Могужи Т.Шардинг
Конечно, в дополнение к этому существует множество фреймворков, предлагаемых соответствующими компаниями, но, судя по большему количеству пользователей, это именно те, что указаны выше. Среди них с момента появления MyCAT и здал на основе кобара мало кто пользовался кобаром. Хотя ZDAL также имеет открытый исходный код, статей и отзывов пользователей мало, он не поддерживает MongoDb, а коммуникационная активность относительно низкая.
Итак, эта статьяСравните более активные sharding-jdbc и MyCAT.
Расширенное чтение: Dangdang проделал хорошую работу, в дополнение к sharding-jdbc также есть эластичная работа для сегментирования запланированных задач.
Обзор сравнения
основные показатели | Sharding-jdbc | Mycat | zdal |
---|---|---|---|
поддержка ORM | любой | любой | любой |
дела | Встроенная слабая XA, гибкая транзакционная BASE типа доставки с максимальной эффективностью | Поставляется со слабым XA | Встроенная слабая XA, гибкая транзакционная BASE типа доставки с максимальной эффективностью |
Филиальная библиотека | служба поддержки | служба поддержки | служба поддержки |
Филиальная библиотека | служба поддержки | Одна подтаблица базы данных не поддерживается | служба поддержки |
развивать | Высокая стоимость разработки и большое количество кода | Низкая стоимость разработки и минимальное вмешательство в код | Стоимость разработки не высокая, конфигурация понятна |
Аффилированная компания | dangdang.com | На основе вторичной разработки Али Кобара, техническое обслуживание сообщества | Муравей Финансовый |
Поддержка базы данных | любой | Oracle, SQL Server, Mysql, DB2, монгодб | монгодб не поддерживается |
Мероприятия | Есть также много компаний, использующих новые проекты в последние годы. | Сообщество очень активное, некоторые компании уже используют | низкая активность |
монитор | никто | имеют | |
разделение чтения-записи | служба поддержки | служба поддержки | |
материал | Меньше информации, github, официальный сайт, онлайн-обсуждения | Много информации, github, официальный сайт, группа Q, книги | немного |
Эксплуатация и техническое обслуживание | низкая стоимость обслуживания | Высокая стоимость обслуживания | низкая стоимость обслуживания |
ограничение | Некоторые методы JDBC не поддерживаются, ограничения операторов SQL | Ограничение SQL-операторов | |
пул соединений | версия друида | нет запроса | нет запроса |
сложность конфигурации | в целом | сложный | Это относительно просто, и существует несколько правил разделения операций чтения и записи и отдельных таблиц. |
Сравнение ключевых показателей
1. Затраты на разработку и эксплуатацию и техническое обслуживание
sharding-jdbc
- sharding-jdbc — это облегченный фреймворк, не являющийся независимым работающим промежуточным программным обеспечением, он предоставляет функции в виде проектно-зависимых jar-файлов без дополнительного развертывания, его можно понимать как расширенный драйвер JDBC.
- Нет необходимости в том, чтобы персонал по эксплуатации и обслуживанию, а также администратор базы данных воспринимал код и правила политики сегментирования, а при эксплуатации и обслуживании необходимо только поддерживать и выполнять миграцию установленных таблиц и данных.
- По сравнению с Mycat это преимущество sharding-jdbc, которое снижает затраты на развертывание и затраты на обучение администраторов баз данных.
- Принцип заключается в том, чтобы переписать исходный sql через правила.Например, select * from A становится select * from A_01 в соответствии с правилами.При запуске и выполнении sql команда select * from A_01 будет отправлена на сервер mysql.
MyCat
- MyCat — это не конфигурация в коде бизнес-системы, а промежуточное программное обеспечение, которое работает независимо, поэтому конфигурация будет передана администратору базы данных для выполнения.
- Для администратора баз данных он является агентом, который добавляет слой перед сервером mysql.Mycat сам не хранит данные, а данные хранятся на серверной части MySQL.Поэтому надежность данных и транзакций гарантируется MySQL.
- Чтобы снизить риск переноса данных, вСхема алгоритма инкрементной миграции, рекомендованная в предыдущей главе(Рекомендуется к прочтению всем) Описывает, как сегментировать для снижения риска. Если используется MyCat, администратору баз данных необходимо настроить несколько добавочных правил сегментирования, и каждая конфигурация требует перезапуска для выполнения раунда переноса данных. На самом деле, когда MyCat не работает, система не может запрашивать базу данных и по-прежнему влияет на всех пользователей.
- Однако sharding-jdbc реализует в коде правила маршрутизации, что может уменьшить количество операций DBA и перезапусков системы, тем самым уменьшив количество затронутых пользователей.
Рекомендуется прочитать пятый раздел первой главы, чтобы лучше понять вышеприведенные 3-4 пункта.Схема алгоритма и технология выбора подбазы и подтаблицы (1)
- Proxy объединяет идеи больших данных и разделяет обработку OLTP и OLAP, что может быть более подходящим для систем обработки больших данных.В конце концов, работа с данными не обязательно должна иметь серверную систему Java.
Резюме этого пункта: добавочное сегментирование sharding-jdbc и добавочная миграция данных более эффективны, а mycat больше подходит для работы с большими данными.
Примечание: sharding-jdbc расширяет некоторые функции драйвера JDBC, но также ограничивает использование некоторых собственных интерфейсов JDBC. Чтобы узнать о конкретных ограничениях, см.: Ограничения:Dangdang точка com.GitHub.IO/Killing — Jingdong…Этот документ сейчас недоступен Прикрепил:Официальная документация сайта Исходный код официального сайта
Пример конфигурации MyCat Пример конфигурации MyCat 2
2. Возможность подбиблиотеки и подтаблицы
- Еще одним преимуществом sharding-jdbc является возможность разделения таблиц.
- MyCAT не может разделить одну базу данных на несколько таблиц, она должна быть разделена на базы данных, что заставит администратора базы данных добавить машинные узлы.Даже если машинные узлы не будут добавлены, на той же машине будет добавлен экземпляр сервера mysql. jdbc, одна база данных разделена на несколько таблиц, администратору базы данных нужно только выполнить оператор создания таблицы.
3. Дела
Прежде всего, поговорим о XA.Хотя метод многоэтапной отправки XA имеет хорошую гарантию целостности распределяемых данных, он сильно снизит производительность приложения.
-
sharding-jdbc и mycat поддерживают слабый XA.Слабый XA означает, что базы данных после подбазы данных отвечают за фиксацию и откат собственных транзакций, а единого планировщика для централизованной обработки нет. Преимущество этого в том, что он естественно поддерживается и не влияет на производительность. Однако, как только возникает проблема, например, данные двух библиотек должны быть отправлены, одна успешно отправлена, а другая не работает из-за отключения сети, возникает проблема несогласованности данных, и это несоответствие данных является постоянным.
-
Гибкие транзакции являются эффективным дополнением слабого XA. Существует множество типов гибких транзакций. Sharding-JDBC в основном реализует тип доставки с максимальной эффективностью. То есть считается, что транзакция пройдет успешно после повторных попыток. Если каждая транзакция терпит неудачу, она будет записана в базу данных транзакций, и она будет продолжать попытки асинхронно до тех пор, пока транзакция не завершится успешно (количество попыток может быть установлено, и если попыток слишком много, а она все равно не удалась, она будет сохранена в базе данных и требуют ручного вмешательства). На пути попытки данные будут несогласованными в течение определенного периода времени, но в конце концов они будут непротиворечивыми. Таким образом, можно пожертвовать строгой согласованностью, не влияя на производительность, для достижения конечной согласованности данных. Недостаток транзакции с наилучшими усилиями заключается в том, что предполагается, что транзакция должна быть успешной и не может быть отменена, поэтому она не является гибкой.
Примечание:Другой гибкий тип транзакции — TCC или Try Confirm Cancel. Фиксацией или откатом транзакций можно управлять с помощью диспетчера транзакций, что ближе к собственным транзакциям, но все же в конечном итоге согласуется. Недостатком является то, что бизнес-код должен сам реализовывать интерфейс Try Confirm Cancel, что оказывает определенное влияние на существующий бизнес. Sharding-JDBC не поддерживает TCC.
4. Мониторинг
Зачем вам нужен мониторинг?Из-за слабого XA и типа доставки с максимальной эффективностью для вышеуказанных транзакций все еще существует вероятность сбоя.
- MyCat должен отслеживать страницу, отслеживать сердцебиение серверов MyCat и Mysql, операционный и обслуживающий персонал может видеть
- Однако sharding-jdbc не отслеживает, выполнена ли транзакция окончательно.Возможно, потребуется переписать исходный код.Если сегмент не выполнен успешно, отправьте текстовое сообщение, DingTalk и т. д.Пример конфигурации мониторинга MyCat
5. Ограничения по заявлениям
- Использование подобного запроса для подбазы данных и подтаблицы sharding-jdbc ограничено. В настоящее время Shariding-JDBC не поддерживает ключи сегментирования, включенные в подобные операторы, но подобные операторы без ключей сегментирования могут выполняться правильно. Что касается аналогичной проблемы с производительностью, она связана с базой данных, Sharing-JDBC просто анализирует SQL и маршрутизируется к правильному источнику данных. Будут ли опрошены все библиотеки и таблицы, определяется по ключу шарда.Если ключ шарда не включен в SQL, будут опрошены все библиотеки и таблицы.Это не имеет отношения к тому, есть ли лайк.
- MyCat не имеет ограничений
6. Сравните стоимость Ant Financial
По сравнению с zdal конфигурация sharding-jdbc аналогична, но sharding-jdbc предоставляет методы пространства имен java, springboot, yml, spring и имеет официальный веб-сайт и поддержку веб-сайта gitee. Относительно здалые пользователи более активны.
Пример интеграции подтаблиц подбазы данных Sharding-jdbc mybatis-plus
Примеры кода подробно описаны, а основные моменты разработки таковы. Для получения конкретного исходного кода перейдите на мой адрес giteesharding-jdbc-example.
В разработке шардинга sharding-jdbc есть несколько ключевых моментов: 0. Ввести ключевые зависимости 2019.10, последняя версия 4.0.0-RC2.
<dependency>
<groupId>org.apache.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-namespace</artifactId>
<version>4.0.0-RC2</version>
</dependency>
- Настройте стратегию базового источника данных и подтаблицы подбазы данных в xml. Среди них DbShardingAlgorithm и TbShardingAlgorithm должны быть реализованы в коде Java.
<--分库的规则对象类->
<bean id="preciseModuloDatabaseShardingAlgorithm" class="com.dizang.sharding.config.algorithm.DbShardingAlgorithm" />
<--分表规则对象类->
<bean id="preciseModuloTableShardingAlgorithm" class="com.dizang.sharding.config.algorithm.TbShardingAlgorithm" />
<--分库根据的key->
<sharding:standard-strategy id="databaseStrategy" sharding-column="user_id" precise-algorithm-ref="preciseModuloDatabaseShardingAlgorithm" />
<--分库根据的key->
<sharding:standard-strategy id="tableShardingStrategy" sharding-column="user_id" precise-algorithm-ref="preciseModuloTableShardingAlgorithm" />
<sharding:key-generator id="orderKeyGenerator" type="SNOWFLAKE" column="id" />
<sharding:data-source id="shardingDataSource">
<--分表数据源->
<sharding:sharding-rule data-source-names="ds0, ds1">
<sharding:table-rules>
<--逻辑表名->
<sharding:table-rule logic-table="t_user"
actual-data-nodes="ds$->{0..1}.t_user_$->{0..2}"
<--分库分表逻辑bean->
database-strategy-ref="databaseStrategy"
table-strategy-ref="tableShardingStrategy"
key-generator-ref="orderKeyGenerator" />
</sharding:table-rules>
<--配置能适用规则的表->
<sharding:binding-table-rules>
<sharding:binding-table-rule logic-tables="t_user" />
</sharding:binding-table-rules>
<--配置不需要分库分表的表->
<sharding:broadcast-table-rules>
<sharding:broadcast-table-rule table="t_order" />
</sharding:broadcast-table-rules>
</sharding:sharding-rule>
</sharding:data-source>
<--sqlSessionFactory配置shardingDataSource数据源->
<bean id="sqlSessionFactory"
class="com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean">
<property name="dataSource" ref="shardingDataSource"/>
<property name="mapperLocations" value="classpath*:mapper/*.xml"/>
</bean>
- Стратегия написания кода Java для подбиблиотеки Необходимо наследовать класс правила разделения SingleKeyDatabaseShardingAlgorithm, переписать правила маршрутизации, когда равно равно, больше и меньше
public class DbShardingAlgorithm implements PreciseShardingAlgorithm<Long>{
@Override
public String doSharding(Collection<String> databaseNames, PreciseShardingValue<Long> shardingValue) {
for (String each : databaseNames) {
if (each.endsWith(shardingValue.getValue() % 2 + "")) {
return each;
}
}
return null;
}
}
- Стратегия разделения таблицы написания кода Java Необходимо наследовать класс правила разделения SingleKeyTableShardingAlgorithm, переписать правила маршрутизации, когда равно равно, больше и меньше
public class TbShardingAlgorithm implements PreciseShardingAlgorithm<Long>{
@Override
public String doSharding(Collection<String> tableNames, PreciseShardingValue<Long> shardingValue) {
for (String each : tableNames) {
if (each.endsWith(shardingValue.getValue() % 2 + "")) {
return each;
}
}
// return shardingValue.getLogicTableName()+(shardingValue.getValue() % 2);
throw new UnsupportedOperationException();
}
}
Рекомендуемая литература для реализации кода, специфичного для zdal
Добро пожаловать, чтобы следовать
Мой публичный номер: Кшитигарбха думает
Моя одежда: Дзидзо Кельвинgit ee.com/jizo-consider…
Рекомендуется прочитать исходный код sharding-jdbc:
Коллекция анализа исходного кода Sharding-JDBC