Назначение таблиц Skewed и Partitioned одинаково для оптимизации запросов. Однако то, как они это делают и когда они применимы, немного отличается.
Предположим, мы создаем фитнес-трекер, такой как Strava, и данные пользователей постоянно отправляются нам.
Partitioning
: вполне нормально разбивать такие данные по дате и времени, например /year=2017/month=10/day=12
и т. д. Таким образом, любые фильтры на основе даты и времени будут очень быстрыми, например.
SELECT col FROM table WHERE year=2017 AND month=10
Skewed table
: Может случиться так, что некоторые пользователи отправляют не только тренировку в тренажерном зале, но и количество пройденных шагов, геолокацию, езду на велосипеде, потребление калорий, сон и многое другое. Таких пользователей очень мало, но объем данных, которые они отправляют, очень велик по сравнению со средними пользователями. Поэтому, если вы хотите запросить UserId
, это будет медленно:
SELECT col FROM table WHERE year=2017 AND month=10 AND userid=20
Однако здесь может помочь перекошенная таблица. Предположим, что этими активными пользователями были 20, 23, 25
. Теперь вы можете создавать данные для хранения, такие как:
/year=2017/month=10/day=12/userid=20
/year=2017/month=10/day=12/userid=23
/year=2017/month=10/day=12/userid=27
/year=2017/month=10/day=12/userid=others
Как видите, у этих фанатов фитнеса появился собственный каталог. Это приведет к быстрому запросу при выполнении того же запроса выше (фильтр по идентификатору пользователя).
Это еще не все, см. эту документацию.
person
chhantyal
schedule
25.12.2017