ดังนั้นในระยะสั้น
- ข้อมูลละติจูดและลองจิจูดควรเป็นประเภทใด
- ฉันควรเรียกใช้คำสั่ง SQL เพื่อรับร้านอาหารที่ใกล้ที่สุด 100 แห่งแรกหรือไม่
รายละเอียด:
ฉันมีบันทึกขนาด 100k biz แต่ละรายการที่มี lattitude และลองจิจูด ฉันเห็นว่า MySQL สนับสนุนชนิดข้อมูลที่เรียกว่า point จริงๆ ฉันควรใช้สิ่งนี้แทนหรือไม่
MySQL รองรับระบบจัดเก็บ KDTree หรือไม่http://en.wikipedia.org/wiki/File:KDTree-animation.gif
เป็นการดีที่สุดที่จะใช้ชนิดข้อมูลจุดแทนที่จะเป็นชนิดข้อมูลลอยตัวปกติเพื่อจัดเก็บ latitutude และลองจิจูดหรือไม่
ในที่สุดฉันต้องการค้นหาสิ่งต่าง ๆ เช่นร้านอาหาร 100 แห่งแรกที่อยู่ใกล้กับจุด 105,6 และฐานข้อมูลของฉันมีจำนวนมากและคะแนน เห็นได้ชัดว่าการคำนวณระยะทางทีละหนึ่งสำหรับทุกระเบียนและทุกจุดจะเป็น O (n) และด้วยเหตุนี้
ขอให้สังเกตว่าฉันทราบถึงวิธีแก้ปัญหาที่ง่ายกว่าที่อธิบายไว้ในApplication ระยะทางเหมือน Yelp ดึงข้อมูลระยะทางจากฐานข้อมูลอย่างมีประสิทธิภาพและจะนำไปใช้กับตัวฉันเองด้วยเช่นกันสำหรับการเริ่มต้น นั่นเป็นคำตอบที่ดี
อย่างไรก็ตามฉันคิดว่ามีคำตอบสำหรับครอบตัดหนึ่งคำที่ควรมีประสิทธิภาพสูงกว่าใช่ไหม ในความเป็นจริงการจัดเก็บตำแหน่งตามละติจูดและลองจิจูดและการค้นหาสิ่งของที่ใกล้เคียงที่สุดเป็นปัญหาที่พบบ่อยมากฉันคาดว่า mysql จะมีรูปแบบการออกแบบพิเศษสำหรับสิ่งนั้น มันมีหรือไม่
ฉันจะเรียนรู้เพิ่มเติมเกี่ยวกับมันได้ที่ไหน ขอบคุณ