Перевод текста на русский язык:
Разделение чтения и записи, разделение на библиотеки, таблицы, библиотеки и таблицы.
В случае разделения чтения и записи приложение должно различать чтение SQL и запись SQL: чтение SQL выполняется из вторичной библиотеки, а запись SQL — из первичной. Также необходимо учитывать задержку синхронизации между основной и вторичной библиотеками, высокую доступность и другие проблемы.
При разделении библиотек и таблиц приложение должно уметь анализировать, переписывать, маршрутизировать и собирать результаты SQL-запросов, а также поддерживать распределённые транзакции и распределённый генератор идентификаторов. Если SQL-запрос направляется на один узел, то его не нужно оптимизировать или переписывать.
Зачем разделять таблицы и библиотеки?
Когда объём данных в бизнес-таблицах становится большим, любые операции CRUD (создание, чтение, обновление и удаление) становятся ресурсоёмкими для базы данных независимо от того, используются ли индексы. Из-за большого объёма данных база данных может работать медленнее, поэтому необходимо разделить данные по горизонтали (sharding), разделив одну таблицу на несколько и распределив их по нескольким таблицам.
Отложить разделение таблиц и библиотек?
Можно перенести старые исторические данные из бизнес-таблиц и таблиц заказов в исторические таблицы. Это можно считать начальной стадией разделения таблиц.
Типы:
Цель: Обеспечить работу промежуточного программного обеспечения для разделения баз данных и таблиц ORM, чтобы разработчики могли работать с базами данных так же, как с одной библиотекой и таблицей.
Решение: Определить тип операции и переключиться на источник данных для выполнения. Не требуется переписывать или изменять SQL. Источник данных можно настроить, изменив его при необходимости, чтобы он мог обнаруживать изменения (переключение на основную библиотеку при изменении основной библиотеки и т.д.). Если одна и та же транзакция включает операцию чтения (например, select) и операцию записи (например, insert), она выполняется в основной библиотеке. Это легко реализовать, просто направив соединение на основную библиотеку при открытии транзакции. В одном потоке и в одном соединении с базой данных, если есть операция записи, все последующие операции чтения будут считываться из основной библиотеки для обеспечения согласованности данных. Как узнать, когда поток завершён? Когда соединение можно вернуть в пул соединений?
Преимущества разделения чтения и записи: Избежание единичных точек отказа. Балансировка нагрузки и расширение возможностей чтения. Можно эффективно предотвратить перегрузку одного узла путём настройки нескольких узлов вторичной библиотеки.
В случае разделения чтения и записи приложению необходимо различать чтение SQL и запись SQL, выполнять чтение SQL во вторичной библиотеке и запись SQL в основной, а также учитывать задержку синхронизации главной и вторичной библиотек, высокую доступность и другие вопросы.
Можно выбрать разделение или не использовать его. Некоторые таблицы имеют номера, рассчитанные на основе ключа разделения. Например, 0 в user0 можно получить с помощью определённого поля. Устанавливается значение по умолчанию для DS, и если DS не найден, используется значение по умолчанию. DS определяет, как маршрутизировать, а таблицы — как анализировать и преобразовывать в правильные таблицы для создания правильного SQL. Определяет, следует ли создавать несколько SQL на основе ключа разделения.
Возможно, SQL генерируется на основе библиотеки или таблицы и разделяется.
Промежуточное ПО обнаруживает, что SQL-скрипт представляет собой инструкцию INSERT, UPDATE или DELETE, автоматически выбирает основную библиотеку данных; если это запрос, он случайным образом выбирает вторичную библиотеку данных; и выбирает основную библиотеку, если транзакция открыта. Таким образом, источник данных также имеет атрибут типа, и вторичные библиотеки одного типа одинаковы и совместно используют кэш.
Обязательное разделение маршрутизации (применимо только к текущему потоку):
Пользователи могут указать конкретную DS и таблицу для использования, вместо того чтобы полагаться на вычисление ключа разделения для маршрутизации. В Bee это можно сделать с помощью HintManager.
Высокая доступность: Конфигурационная информация динамически применяется: Изменения, удаления и добавления связанной информации в реестре централизованы, синхронизированы и немедленно применяются в рабочей среде. Ссылка: постоянная и синхронная конфигурация.
Разделение библиотек без разделения таблиц (реализовано в V1.8): Разделение чтения и записи считается типичным примером разделения библиотек без разделения таблиц. Все таблицы одинаковы. Обычно таблицы, связанные с различными бизнес-процессами, разделяются между разными библиотеками в соответствии с таблицами для маршрутизации.
Разделение библиотек и таблиц: Не поддерживается (планируется в версии 2.0). Почему? Причины следующие: Хотя разделение таблиц может снизить нагрузку на отдельные таблицы, оно не всегда может использоваться для локальных транзакций. Вместо этого следует использовать таблицы в разных библиотеках, чтобы эффективно избегать распределённых транзакционных проблем. В сценариях, где невозможно избежать распределённых транзакций, некоторые бизнес-операции всё равно требуют сохранения согласованности транзакций. На основе XA распределённые транзакции неэффективны в высококонкурентных сценариях и широко не используются крупными интернет-компаниями. Они предпочитают гибкие транзакции с конечной согласованностью вместо строгих транзакций с сильной согласованностью.
С точки зрения приложений необходимо различать операции чтения (такие как select, show и explain) и операции записи (такие как insert, update и delete). Операции записи направляются в основную библиотеку, а основная библиотека синхронизируется со вторичной. Последующие операции чтения направляются во вторичную библиотеку для запроса данных. Проблемы с транзакциями. Если транзакция включает операции чтения (например, select) и записи (например, insert), и операция чтения направляется во вторичную библиотеку, а операция записи — в основную, поскольку они охватывают несколько библиотек, локальные транзакции JDBC больше не могут контролироваться и становятся распределёнными.
Поэтому для операций чтения и записи в настоящее время основным подходом является выполнение всех SQL-операций в основной библиотеке для управления ими. Поскольку задействована только одна библиотека, локальная транзакция JDBC может справиться с этим.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )