возможно ли осквернить Vistess второстепенным ключом - PullRequest
2 голосов
/ 21 апреля 2020

Мы используем базу данных Vitess для масштабирования и достижения горизонтального шардинга в mysql. можно ли сделать вторичный осколок в Vitess.

Например, например: Table 1 - Agency ( AgencyID INT, CreatedOn DATETIME )

Table 2 - PayrollDetails ( AgencyID INT FOREIGN KEY TO Agency Table, PayrollID INT, PayrollCreatedOn DATETIME )

Теперь мы разграбили обе таблицы с AgencyID в качестве ключа разметки , но таблица PayrollDetails очень велика и содержит более 100 миллионов записей. Итак, теперь мы планируем снова разделить таблицу PayrollDetails с полем PayrollCreatedOn, а первичный раздел для обеих таблиц должен быть с ключом агентства, но таблица payrollDetails должна разделиться как с AgencyID, так и с PayrollCreatedOn. Как мы можем достичь этого в Vitess?

1 Ответ

2 голосов
/ 24 апреля 2020

Концептуально ключ шардинга (первичный vindex) используется, чтобы решить, к какому шарду относится строка. Таким образом, невозможно иметь два ключа шардинга, потому что они будут определять конфликтующие местоположения для строки.

Если я правильно понимаю, вы хотите запросить таблицу, используя PayrollCreatedOn в предложении where, вы можете создать вторичный Виндекс. Это создаст таблицу поиска, которая указывает на то, где находится строка, и Витесс может использовать это. Здесь есть объяснение: https://vitess.io/docs/reference/vindexes/. Существует новая команда с именем CreateLookupVindex, которая способна заполнить эту справочную таблицу. Однако это еще не задокументировано.

Витесс также позволяет вам "материализовать" таблицу с помощью другого первичного виндекса. В этом случае вторая таблица будет копией первой таблицы в реальном времени, но по-разному. Вы можете увидеть демонстрацию для этого на первой странице vitess (прокрутите вниз к видео).

...