数据准备
数据源 (点数据使用之前导入的数据120038310条,https://juejin.cn/post/6903100159484395534)
CREATE TABLE default.points
(
`id` UInt32,
`Lon` Float32,
`Lat` Float32
)
ENGINE = MergeTree()
ORDER BY (intHash64(id), Lon, Lat)
SAMPLE BY intHash64(id)
SETTINGS index_granularity = 8192
insert into points SELECT id,Lon,Lat FROM pnts
采样功能和Hash函数
SAMPLE 子句特点
该 SAMPLE 子句允许近似于 SELECT 查询处理。
启用数据采样时,不会对所有数据执行查询,而只对特定部分数据(样本)执行查询。 例如,如果您需要计算所有访问的统计信息,只需对所有访问的1/10分数执行查询,然后将结果乘以10即可。
近似查询处理在以下情况下可能很有用:
当你有严格的时间需求(如<100ms),但你不能通过额外的硬件资源来满足他们的成本。
当您的原始数据不准确时,所以近似不会明显降低质量。
业务需求的目标是近似结果(为了成本效益,或者向高级用户推销确切结果)。
Hash函数intHash64可以用于将元素不可逆的伪随机打乱。经过测试一亿多个点得抽样性能比较满意,可以为页面提供比较满意得展示。注意事项:sample的字段必须是int类型,必须在主键或者排序中。
抽样sql,0.01为示例,可根据实际修改
SELECT id,Lon,Lat FROM points SAMPLE 0.01
增加服务端和网页
使用Express作为服务端,请求数据并且在网页中使用Maptalks展示,本地测试
参考资料:
https://clickhouse.tech/docs/zh/sql-reference/functions/hash-functions/#md5
https://clickhouse.tech/docs/zh/sql-reference/statements/select/sample/