第 3 章 · 三大特殊数据类型

三个交互演示:① Bitmap 像素画板 · ② HyperLogLog 误差实验 · ③ Geo 地图

Bitmap 像素画板:点击格子设位(共 1024 位 = 128 字节)

每个格子代表一个 bit。点击切换 0/1,右侧实时显示 BITCOUNT/BITPOS 等命令的结果:

点击格子翻转 bit
对比一下:这 1024 个状态如果用 Set 至少需要 80KB(每元素 ~80 字节),用 Bitmap 只需 128 字节,节省 640 倍

HyperLogLog 误差实验:插入 N 个元素,看估算精度

这是简化版 HLL(256 桶 vs 真实 16384 桶),但能完整复现「桶 + 调和平均」的核心思路:

实验结果

真实基数HLL 估算误差桶数据

桶可视化(前 32 / 256 桶,显示「最大前缀 0 数」)

累计统计

原理回顾:每插入一个元素 → hash → 用低 8 位选桶(共 256 桶)→ 数余下 hash 的前导 0 个数 → 取桶的最大值 → 最后通过 256 个桶的调和平均反推总数。

Geo 地图:点击地图加点,画半径搜索圈

地图代表一个城市俯瞰图。点击添加新店铺,右键设置搜索中心,滚轮调整搜索半径:

🗺 所有点

底层揭秘:每个点的「score」就是 GeoHash —— 把 (x, y) 二维坐标交叉编码成一维整数。地图上接近的点,整数也接近,所以可以用 ZRANGEBYSCORE 快速找邻居。