Формат файла Sypex Geo разработан придерживаясь следующих правил.
Минимизировать количество файловых операций
Жесткие диски в современых компьютерах являются самым медленным устройством (до массового перехода к более производительным SSD еще далеко). И самым узким их местом является случайное чтение маленьких объемов информации (несколько килобайт). В то же время большинство типичных веб-сайтов как раз и состоит преимущественно из множества мелких файлов. Поэтому при создании Sypex Geo была поставлена задача минимизировать количество файловых операций.
Чтение блоками лучше побайтного чтения
Чтение файлов с жесткого диска производится блоками (обычно 4 КБ), т.е. даже если нужно прочитать один байт - с диска всё равно читается весь блок. Поэтому формат файла был спроектирован так, чтобы вместо 4-8 чтений по 6 байт из разных частей файла, читался один блок в несколько КБ.
Меньше данных - выше скорость
Файл содержит специальный индекс первых байт (октетов), благодаря которому достигается следующие преимущества.
- Всего 3 байта вместо 4-х для хранение диапазона IP (да это кажется немного, но так мы убираем 25% бесполезных данных, при 2 млн. диапазонах экономия уже около 2 МБ).
- Сильно уменьшается диапазон выборки в основном индексе.
- Увеличивается скорость при поиске нужного IP в базе, так как сравнивать нужно на один байт меньше (тем более, что этот байт будет одинаковый).
Например, нужно найти IP 24.89.68.43, из базы будет выбран такой список диапазонов:
24.54.192.0
24.56.0.0
24.57.0.0
24.58.0.0
24.64.0.0
24.72.144.0
24.76.0.0
24.88.0.0
24.89.64.0
24.89.128.0
24.89.192.0
24.90.0.0
...
Как видите у всех диапазонов первый байт одинаковый (в среднем на каждый первый байт приходится по 7-9 тысяч диапазонов). В выборке таких IP будет несколько сотен. Следовательно проверять первый байт в данном случае пустая трата времени, он у всех одинаковый.
Меньше преобразований данных
При поиске нужного IP не производится преобразование из бинарной строки в целое число (как это делается у всех конкурентов, а зачастую еще и с этими числами потом какие-то арифметические операции делаются).
В Sypex Geo всё максимально упрощено, просто сравнение двух 3-байтовых строк, в том же виде в котором они прочитаны из файла - никаких преобразований.
Простые структуры хранения данных
Хранение справочников городов и регионов в простейшем виде, числа сохраняются в бинарном виде, строки с нулевыми символами в конце. Так достигается максимальная производительность при извлечении данных, а также компактность хранения данных. Никаких JSON или XML, на парсинг которых уходит куча времени.
Открытость
Формат изначально создавался с расчетом на открытость и возможность пользователям самостоятельно создавать файлы БД в формате Sypex Geo. Соответственно будут опубликованы, как спецификации самого формата, так и инструменты для создания файлов БД. Опубликованы они будут после выхода из стадии беты и закрепления спецификаций формата, а то возможны еще небольшие изменения.
Универсальность
Также предусмотрена возможность хранения в БД любых пользовательских данных, а не только стандартной информации о странах и городах.
Можете также ознакомиться со спецификацией формата Sypex Geo 2.2.