【发布时间】:2011-04-15 17:02:41
【问题描述】:
我有一个 x,y,z 3D 点存储在 MySQL 中, 我想问区域,切片或点邻居。 有没有办法使用 Peano-Hilbert 曲线来索引点以加速查询? 或者有没有更有效的方法将 3D 数据存储在 MySQL 中?
感谢阿曼。
【问题讨论】:
标签: mysql hilbert-curve
我有一个 x,y,z 3D 点存储在 MySQL 中, 我想问区域,切片或点邻居。 有没有办法使用 Peano-Hilbert 曲线来索引点以加速查询? 或者有没有更有效的方法将 3D 数据存储在 MySQL 中?
感谢阿曼。
【问题讨论】:
标签: mysql hilbert-curve
我个人从未走到这一步,但我使用 Z 曲线来存储 2D 点。这工作得很好,并且感觉没有必要尝试实现希尔伯特曲线以获得更好的结果。
这应该可以让您快速过滤掉肯定不在附近的点。在绝对最坏的情况下,您仍然需要扫描超过 25% 的表格才能找到某个区域内的点。
解决方法是将 x y z 拆分为二进制,然后使用曲线将它们拼接成单个值。我希望我已经准备好一个 SQL 脚本,但我只有一个用于 2d z 曲线的脚本,这要容易得多。
编辑:
很抱歉,您可能已经知道所有这些,实际上只是在寻找 SQL 示例,但我有一些补充:
【讨论】:
您可能可以使用算法创建geohash,并将其扩展为 3 个坐标。基本上,您定义将有一个可能的 3d 点的世界立方体,然后当您添加更多位时,您会缩小立方体。然后,您始终如一地定义它,使左下角具有最小值,并且您可以执行范围检查,例如:
XXXXa < the_hash < XXXXz
【讨论】: