Кэширование базы данных привязки MaxMind City в оперативной памяти + Производительность сервера


Я пытался найти подходящую базу данных GeoIP для нашего приложения, и, насколько я могу судить, MaxMind City, вероятно, лучший (хотя, если я ошибаюсь, пожалуйста, дайте мне знать!). В настоящее время я пробую бесплатную версию, которая не совсем точна в Великобритании, но она подойдет для целей тестирования.

Итак, возвращаясь к теме:

Наше приложение написано на PHP, и в конечном итоге у нас будет много входящего трафика. Причина, по которой мы будем использовать базу данных GeoIP, заключается в следующем потому что нам нужно отображать город, регион, страну на каждой загружаемой странице, а также сохранять данные для конкретного посетителя в базе данных mysql. Поэтому я начал думать, что загрузка двоичных данных при каждом запросе страницы приведет к тому, что сервер будет потреблять много оперативной памяти и увеличит скорость обработки. Вот почему Мне интересно, можно ли кэшировать его в оперативной памяти и использовать его с помощью PHP, потому что это 26 Мб (я знаю, что это может показаться немного), но все же, когда мы начнем получать тысячи запросов страниц в секунду это приведет к снижению производительности, чего мы, очевидно, хотим избежать.

Сервер:

Процессор: 16 ГГц (8 x 2 ГГц)

ОПЕРАТИВНАЯ память: 16384 МБ

Жесткий диск: 400 ГБ

Apache + Nginx + Лак, PHP5.3, MySQL5.1

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

Спасибо!

Author: rabudde, 2012-02-22

1 answers

Мы используем MaxMinds GeoIP City для приложения Adserver (поэтому там действительно много трафика). Некоторые тесты, основанные на тестовых сценариях MaxMind, которые помещали базу данных в память, были для нас недостаточно эффективными. Потому что данные были кэшированы для каждого отдельного процесса PHP. Поэтому мы решили поместить две таблицы (ip2location и city) в MySQL (вам нужно загрузить CSV-файлы), которые также будут кэшировать таблицы в памяти, потому что они действительно маленькие. С кластеризованным индексом в таблице ip2location, мы можем запросить loc_id для IP-адреса примерно за 10 мс, поэтому вам просто нужно получить данные о городе на основе этого loc_id, но это также должно быть очень быстро.

 3
Author: rabudde, 2012-02-22 13:37:36