我有一個存儲在MySQL中的x,y,z三維點, 我想問一下區域,切片或點的鄰居。 有沒有辦法使用Peano-Hilbert曲線對點進行索引來加速查詢? 還是有更有效的方式來存儲在MySQL的3D數據?基於Peano-Hilbert曲線的索引?
謝謝阿爾曼。
我有一個存儲在MySQL中的x,y,z三維點, 我想問一下區域,切片或點的鄰居。 有沒有辦法使用Peano-Hilbert曲線對點進行索引來加速查詢? 還是有更有效的方式來存儲在MySQL的3D數據?基於Peano-Hilbert曲線的索引?
謝謝阿爾曼。
我個人從未走過這麼遠,但我用Z曲線來存儲2D點。這工作得很好,並沒有覺得有必要嘗試實現希爾伯特曲線以獲得更好的結果。
這應該可以讓你快速過濾掉那些並不靠近的點。在絕對最壞的情況下,您仍然需要掃描超過25%的表格才能找到某個區域內的點。
解決問題的方法是將x y z分成二進制文件,並使用曲線將它們拼接成單個值。我希望我已經準備好了一個SQL腳本,但是我只有一個用於2d z曲線的工具,這個工作要容易得多。
編輯:
對不起,你可能已經知道這一切已經和真的只是尋找SQL樣品,但我有一些補充:
感謝您的回答,我可以嘗試Z曲線(或者在3D中,有時它被稱爲莫頓排序)。我看到了PostgreSQL的一個插件:http://www.sai.msu.su/~megera/wiki/README_q3c也許會有另外一個用於MySQL ... – Arman 2010-09-22 14:36:31
對不起,對於Z的最壞情況-Curve(morton number)爲50%,希爾伯特曲線爲25%。我在我的博客上寫了一組關於Z曲線的一些小文章:http://www.rooftopsolutions.nl/blog/search?criteria=morton – Evert 2010-09-22 15:04:43