Então, resumindo,
- Qual deve ser o tipo de dados de latitude e longitude?
- Qual comando SQL devo chamar para obter os primeiros 100 restaurantes mais próximos, por exemplo?
Detalhe:
Tenho 100k biz gravar cada um com latitude e longitude. Vejo que o MySQL realmente suporta um tipo de dados chamado point. Devo usar isso em vez disso?
O MySQL suporta o sistema de armazenamento KDTree http://en.wikipedia.org/wiki/File:KDTree-animation.gif
É melhor usar o tipo de dados de ponto em vez do tipo de dados flutuante regular para armazenar latitutude e longitude?
Eventualmente, quero encontrar coisas como os 100 primeiros restaurantes mais próximos dos pontos 105,6, por exemplo, e meus bancos de dados contêm muitos negócios e pontos. Obviamente, calcular a distância uma a uma para todos os registros e para todos os pontos seria O (n) e, portanto, é uma merda.
Observe que estou ciente de uma solução mais simples descrita em Como aplicativos como o Yelp recupera informações de distância do banco de dados de forma eficiente e implementará isso também para começar. Essa é uma boa resposta.
No entanto, acho que há um creme da resposta da colheita que deve superar esse certo? De fato, armazenar localizações com base em latitude e longitude e encontrar objetos mais próximos é um problema muito comum, espero que o mysql tenha um padrão de design especial para isso. Isso tem?
Onde posso aprender mais sobre isso? Obrigado.