Если вам нужно выполнить поиск по нескольким процессам (что вы почти наверняка делаете в AppEngine), и вы, вероятно, столкнетесь с одним и тем же IP-адресом много раз за короткий промежуток времени (которым вы, вероятно, являетесь), тогда используйте memcacheвероятно, это хорошая идея для скорости.
Подробнее, так как вы сказали, что вы относительно плохо знакомы с кодированием:
Как правильно говорит Леннарт Регебро, медленная вещь - это чтение файла geoip с диска иразбор это.Индивидуальные запросы будут быстрыми.Однако, если какой-либо конкретный процесс обслуживает только один запрос (что, с вашей точки зрения, в AppEngine, это так), то эта цена будет выплачиваться за каждый запрос.Кэширование недавно использованных поисков в memcache позволит вам делиться этой информацией между процессами ... но только для недавно обнаруженных точек данных.Однако, поскольку любой данный ip может отображаться в пакетах (поскольку это один пользователь, взаимодействующий с вашим сайтом), это именно то, что вам нужно.
Другие альтернативы - предварительная загрузка all данные указывают на memcache.Вы, вероятно, не хотите этого делать, так как у вас ограниченный объем доступной памяти, и вы не будете использовать большую ее часть.(Кроме того, memcache будет отбрасывать его части, если вы достигнете предела памяти, а это значит, что вам все равно придется писать резервный код для чтения из базы данных geoip.) В общем, при ленивом кешировании ищите значениеМедленный способ, когда он вам сначала нужен, а затем держать его для повторного использования - очень эффективный механизм.Memcache специально предназначен для этого, так как он выбрасывает данные, которые не использовались в последнее время, когда он сталкивается с нехваткой памяти.
Другая альтернатива в целом (хотя и не в AppEngine) - это запустить отдельный процесс, который обрабатывает толькозапросы на определение местоположения и общение с ним всех ваших интерфейсных процессов (например, через комиссионные).Тогда вы можете воспользоваться предложением просто загрузить базу данных geoip в этом процессе и запрашивать ее в режиме реального времени для каждого запроса.
Надеюсь, что это поможет некоторым.