Кэширование базы данных MaxMind City в оперативной памяти + производительность сервера - PullRequest
2 голосов
/ 22 февраля 2012

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

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

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

Сервер:

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

Оперативная память: 16384 МБ

HDD: 400 ГБ

Apache + Nginx + Varnish, PHP5.3, MySQL5.1

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

Спасибо!

1 Ответ

3 голосов
/ 22 февраля 2012

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

...