Почтовый индекс (ZIP) по всему миру (не только в США) оптимизированная структура данных (не SQL, CSV или Google API) для долгого и латового поиска - PullRequest
1 голос
/ 03 апреля 2011

Кто-нибудь знает структуру базы данных, такую ​​как эта http://www.maxmind.com/app/geolitecity, которая оптимизирована для сверхбыстрого извлечения длинных и широковых данных на основе параметров ZIP или (город, штат, страна)?

База данных Maxmind не поддерживает какой-либо другой поиск, кроме IP-поиска, по крайней мере, на мой взгляд. Так что, если вы знаете, как сделать это желательно на Java, я весь уши.

Это не должна быть база данных типа SQL, файл CSV или решение Google API. Ты просто медленный. Особенно, если вы хотите предложить результаты поиска, отсортированные по расстоянию.

Платные решения также вариант. Структура данных не обязательно должна быть бесплатной.

Ответы [ 2 ]

1 голос
/ 13 января 2012

это можно сделать очень быстро с любым механизмом базы данных, который поддерживает двумерные индексы ... и mysql поддерживает неограниченные измерения, насколько я знаю ... это просто ... вы используете двумерный индекс, чтобы ограничить набор результатов до разумного размера очень быстро ... затем вы проверяете свой набор результатов с помощью алгоритма вычисления высокой точности, если вам нужно ... не сложно ... за исключением того, что вам может понадобиться или два списка вместе, если они пересекают линию долготы 180 / -180 сделать двумерный индекс просто .... индекс (широта, долгота) ... этот индекс работает только для пар широта или широта, долгота ... он не будет работать только на долготе ... если вам нужен дополнительный индекс для индекса долготы (долготы) .... Я выбираю приблизительный квадрат оценки и закругляю углы, если я забочусь о них. ...

если у вас есть почтовый индекс или город, с которого нужно начинать ... почтовые индексы - это всего лишь 1-й индекс ... нет проблем, чтобы это произошло быстро ... просто используйте индексный индекс (zip) ... и если ваш жесткий диск слишком медленный, найдите твердотельный накопитель, чтобы исключить время поиска ... или используйте огромный оперативный памяти и кэшируйте всю таблицу ... это не сложная проблема, в любом случае вы хотите пойти

если это не достаточно быстро для вас, использование сервиса someones не поможет, потому что у вас есть сетевые издержки ... вам придется хранить ваши данные непосредственно в ram / ssd и создавать свою собственную 2-d / 1-d индексацию система, если вам это нужно (не сложно) ... этот маршрут, вероятно, может превысить sql в 10 раз или около того, потому что движок sql имеет много накладных расходов .... Я полагаю, кто-то может предложить услугу, которая работает самостоятельно машина, но на самом деле, это не будет намного лучше, чем SQL, потому что вам все равно придется пройти через кучу обручей, чтобы сделать запрос к их службе. sql и 2-d индексы с твердотельным накопителем будут чертовски быстрыми, вам не нужно обрабатывать данные самостоятельно, если вы не являетесь почтовым отделением, сортируя 10000 почтовых отправлений в секунду на одном компьютере, обслуживающем данные. тогда вам придется написать свои собственные процедуры управления данными.

1 голос
/ 03 апреля 2011

Я не верю, что существует такой способ, как «быстрый» способ сделать это. Я создал API геокодирования для канадских почтовых индексов, и мы ищем два индекса почтовых кодов: один по широте, а другой по долготе. Вы можете создать некоторую сферическую геометрию и разработать ограничивающий «прямоугольник», который будет соответствовать всему на заданном радиусе, но вам все равно придется вернуться назад и выполнить измерение расстояния от точки к точке, используя Vincenty или Haversine или ваш алгоритм выбора расстояния между вашими источниками. и каждый почтовый индекс вы найдете.

Благодаря всемирной базе данных ваша математика усложняется тем, что вы можете пересекать меридианы и экватор.

Вам понадобится какая-то схема кодирования, которая позволит вам работать в радианах, поскольку это то, что требуется большинству хьюристиков для расчета расстояний.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...