倾斜表和分区表的目的是相同的,以优化查询。然而,它们的方式和适用的时间有点不同。 假设我们正在构建像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 如你所见,这些健身狂有他们自己的目录。当您运行上面相同的查询(按用户id筛选)时,这将导致快速查询。 还有更多,请参阅本文档。
1条答案
按热度按时间nszi6y051#
倾斜表和分区表的目的是相同的,以优化查询。然而,它们的方式和适用的时间有点不同。
假设我们正在构建像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
如你所见,这些健身狂有他们自己的目录。当您运行上面相同的查询(按用户id筛选)时,这将导致快速查询。还有更多,请参阅本文档。