Как объединения баз данных работают в распределенной реляционной базе данных? - PullRequest
2 голосов
/ 19 января 2020

Из моего собственного исследования я понимаю основную идею c, лежащую в основе алгоритмов объединения SQL в одной базе данных (нераспределенной) - например. ha sh объединение, объединение объединением, l oop объединение. Являются ли алгоритмы распределенного объединения похожими на алгоритмы в нераспределенной базе данных?

Например, если у меня есть таблица Users с атрибутами: - User_id - Age

И у меня есть таблица Comments с атрибутами: - User_id - Comment_id - Comment

Предположим, что распределенная база данных использует User_id для шардинга таблицы Users и использует Comment_id для шардинга таблицы Comments.

Так что же на самом деле происходит, когда вы вызвать SQL запрос:

SELECT * FROM Users INNER JOIN Comments ON Users.User_id = Comments.User_id

? Таблица пользователей и таблица комментариев сопоставляются на одном компьютере, а затем выполняется соединение? Или есть какой-то способ, которым вы можете создать JOIN, даже если он распространяется?

1 Ответ

3 голосов
/ 19 января 2020

Это ответ высокого уровня.

В распределенной среде существует несколько подходов к JOIN с.

  1. Широковещательные соединения. Одна таблица реплицируется и отправляется на все узлы обработки, каждый из которых имеет часть таблицы большего размера. Канонический вариант использования - это большая таблица с небольшой справочной таблицей.

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

  3. Ha sh объединений на основе ключа разделения одной таблицы. Вторая таблица хешируется и данные отправляются на соответствующие узлы. Затем это возвращается к (2).

  4. Полное соединение ha sh, где данные для обеих таблиц хэшируются и отправляются на узлы, где они размещаются.

Обратите внимание, что слово "ha sh" здесь должно быть обобщенным c. Если разбиение основано на диапазонах данных, то это пример функции ha sh.

Как только данные отправляются на определенный узел, используется другой алгоритм JOIN, который может быть на основе sh, на основе сортировки или на основе индексов (если распределенные данные также поддерживают индексы; многие не поддерживают).

Кроме того, могут быть изменения в алгоритмах для обработки " результаты «больше, чем память» и искажение данных в клавишах JOIN.

Более подробный ответ, вероятно, может занять несколько глав в книге.

...