Vì vậy, trong ngắn hạn,
- Kiểu dữ liệu của vĩ độ và kinh độ là gì?
- Lệnh SQL nào tôi nên gọi để lấy 100 nhà hàng gần nhất chẳng hạn?
Chi tiết:
Tôi có 100k biz ghi mỗi cái với mạng và kinh độ. Tôi thấy rằng MySQL thực sự hỗ trợ một kiểu dữ liệu gọi là điểm. Tôi có nên sử dụng nó thay thế?
MySQL có hỗ trợ hệ thống lưu trữ KDTree không http://en.wikipedia.org/wiki/File:KDTree-animation.gif
Có phải là tốt nhất để sử dụng kiểu dữ liệu điểm thay vì kiểu dữ liệu float thông thường để lưu trữ latitutude và kinh độ?
Cuối cùng, tôi muốn tìm những thứ như 100 nhà hàng đầu tiên gần điểm 105,6 nhất và cơ sở dữ liệu của tôi chứa rất nhiều điểm và điểm. Rõ ràng tính toán khoảng cách từng cái một cho mỗi bản ghi và cho mọi điểm sẽ là O (n) và do đó rất tệ.
Lưu ý rằng tôi biết về một giải pháp đơn giản hơn được mô tả trong Làm thế nào để Ứng dụng như Yelp Lấy thông tin khoảng cách từ cơ sở dữ liệu một cách hiệu quả và sẽ thực hiện chính tôi để bắt đầu. Đó là một câu trả lời tốt.
Tuy nhiên, tôi nghĩ rằng có một tiêu chí của câu trả lời cây trồng nên vượt trội hơn phải không? Trong thực tế, việc lưu trữ vị trí dựa trên vĩ độ và kinh độ và tìm kiếm những thứ gần nhất với nó là một vấn đề rất phổ biến, tôi hy vọng mysql có một mẫu thiết kế đặc biệt cho điều đó. Nó có cái đó không?
Tôi có thể tìm hiểu thêm về nó ở đâu? Cảm ơn.