Ничего особенного новое для добавления но у меня был большой реальный опыт в GIS и геокодирующий от предыдущего задания. Вот то, что я помню:
, Если бы это "время от времени" потребность в Вашем приложении, я определенно рекомендовал бы Google или Yahoo, Геокодирующий API, но осторожен для чтения их условий лицензирования.
я знаю, что Google Maps API в целом легко лицензировать даже для коммерческих веб-страниц, но не может использоваться в ситуации платы доступу. Другими словами, можно использовать его, чтобы рекламировать или предоставить услугу, которая управляет доходом от рекламы, но Вы не можете заряжать людей, чтобы получить доступ к Вашему сайту или даже поместить его позади системы пароля.
Несмотря на эти ограничения, они - оба отличный выбор, потому что они часто обновляют свои уличные базы данных. Большинство свободных инструментов бэкенда и библиотек используют перепись и данные дороги ТИГРА, которые нечасто обновляются, таким образом, Вы, менее вероятно, будете успешно геокодировать адреса в быстро растущих областях или новых подразделениях.
большинство сервисов также ограничивает количество геокодирования запросов, которые можно сделать в день, таким образом, нормально искать адреса, скажем, новых клиентов, которые добавляются к базе данных, но если Вы выполняете пакетное задание, которое подает тысячи адресов от Вашей базы данных в геокодер, Вы собираетесь получить отключение.
я не думаю, что этот был упомянут все же, но ESRI имеет веб-сервисы ArcWeb , которые включают геокодирование, хотя они не являются очень дешевыми. В прошлый раз, когда я использовал их, это стоило приблизительно 1.5 цента за поиск, но необходимо было предварительно оплатить определенную сумму для начала работы. Снова главное преимущество состоит в том, что дорожные данные, которые они используют, усовершенствованы своевременно, и можно использовать данные в коммерческих ситуациях, что Google не позволяет. Услуги ArcWeb также подадут спутниковые и воздушные фотографии с высоким разрешением а-ля Google Maps, снова оцененная на запрос.
, Если Вы хотите к самокрутке или имеете доступ к намного более точным данным, можно купить подписки к данным GIS компаний как TeleAtlas, но это не дешево. Можно купить только состояние или ценность графства данных, если потребности являются чрезвычайно местными. Существует несколько уровней данных - функции GIS только, GIS плюс подробные улицы, все, что плюс данные геокода, все это плюс поток трафика/direction/speed ограничивает для маршрутизации. Конечно, цена повышается, как Вы поднимаетесь уровни.
Наконец, статья Wikipedia о Геокодирование имеет некоторую хорошую информацию об алгоритмах и методах. Даже если Вы не делаете его в своем собственном коде, полезно знать, какие ошибки и точность можно ожидать от различных видов источников данных.
Давайте посмотрим (в произвольном порядке)
Курсоры
non-sargable where clauses
отказ от индексации полей внешнего ключа
отказ от индексации полей, обычно используемых в where clause
коррелированных подзапросах
случайные перекрестные соединения, вызывающие необходимость различать результирующий набор
Плохо работающий код, исходящий из ORM
Код, который вызывает слишком много чтений или вызывается более одного раза, когда в этом не было необходимости (я замечены приложения, которые отправляют один и тот же код много раз, когда в этом не было необходимости, или каждый раз при открытии страницы)
сетевой канал перегружен
Пользовательские функции вызывают построчную обработку
Анализ параметров
] устаревшая статистика
Объединение вместо объединения всех
Плохая конфигурация my.cnf может убить сервер даже при правильном проектировании базы данных и индексации. Прочтите:
http://www.mysqlperformanceblog.com/2006/09/29/what-to-tune-in-mysql-server-after-installation/ http://www.mysqlperformanceblog.com/ 01.11.2007 / innodb-performance-optimisation-basics / http://www.mysqlperformanceblog.com/2007/11/03/choosing-innodb_buffer_pool_size/
http://www.mysqlperformanceblog.com/ 18 августа 2007 г. / как быстро-можно-сортировать-данные-с-mysql / http://www.mysqlperformanceblog.com/2007/09/17/mysql-what-read_buffer_size-value-is -optimal /
http://dev.mysql.com/doc/refman/5.1/en/server-system-variables.html
Полезный аналитический инструмент my.cnf: http://www.day32.com/MySQL/tuning-primer.sh
Я обычно сталкиваюсь со следующими узкими местами (в порядке частоты):
Если система ввода-вывода на сервере не справляется с заданием, вы можете получить конкуренцию за защелку базы данных tempdb, что, в свою очередь, может вызвать серьезные проблемы с производительностью.
Использование табличных данных по одной строке вместо одной таблицы за раз (например, курсоры).
Ненужные (или плохо спроектированные) блокировки.
Регистрирует записи вещей, которые не работают. t необходимо регистрировать (удалить из таблицы вместо таблицы усечения и т. д.)
Наличие ограничений при массовой загрузке данных. Серьезно тормозит вставка. Выключите их, загрузите данные и снова включите.
Физический .... Закончилась память и необходимо перейти на диск.
Вы ищете quotemeta ?
Возвращает значение EXPR с обратной косой чертой для всех символов, отличных от слов.
Обновление: Как hobbs указывает в комментариях, quotemeta
не предназначена для этой цели и, если подумать немного подробнее, могут возникнуть проблемы со встроенными nul
s. С другой стороны, String :: ShellQuote хрипит при обнаружении встроенных null
s.
Самый безопасный способ - полностью избежать оболочки. Использование формы списка 'system' может иметь большое значение для этого (несколько месяцев назад я с ужасом обнаружил, что cmd.exe
все еще может быть задействован в Windows), Я бы порекомендовал это.
Если вам нужен вывод команды,
сканирование таблицы, потому что:
Применение скалярной функции к каждой строке в наборе результатов
SELECT fn_EveluateSomeValue([ColumnName]) FROM LargeTable
То же самое, а также плохо написанные клиентские приложения, которые получают огромный набор записей, а затем обрабатывают его сами, потому что разработчик этого не сделал. Я понимаю, что sql - это что угодно, только не огромная куча для хранения данных.
Попытка сделать все в одном огромном запросе вместо того, чтобы разбивать его на разумные шаги. Иногда это не дает SQL возможности правильно уменьшить количество индексных (надеюсь!) Страниц, которые он должен просматривать. В связи с этим непонимание того, как использовать временные таблицы для передачи манипуляций перед обновлением больших индексированных таблиц.
Отсутствие индексов для объединений или часто запрашиваемых полей.
Исключение полей в индексах, когда вы всегда ищете и возвращаете одно и то же значение (например, форматированное имя сотрудника при поиске с помощью EmployeeID), вызывающее два действия вместо одного.
Мне никогда не удавалось найти много полезной информации о разбиении больших запросов, в Oracle, похоже, вам больше советуют держать все вместе в одном запросе, а не использовать временные таблицы. Вы также можете получить проблемы с журналом, если в вашей temp-таблице содержится много данных. Хотелось бы узнать больше/записать несколько ссылок?
Пункты, которых следует избегать (если возможно):