Формат файла

Формат файла Sypex Geo разработан придерживаясь следующих правил.

Минимизировать количество файловых операций

Жесткие диски в современых компьютерах являются самым медленным устройством (до массового перехода к более производительным SSD еще далеко). И самым узким их местом является случайное чтение маленьких объемов информации (несколько килобайт). В то же время большинство типичных веб-сайтов как раз и состоит преимущественно из множества мелких файлов. Поэтому при создании Sypex Geo была поставлена задача минимизировать количество файловых операций.

Чтение блоками лучше побайтного чтения

Чтение файлов с жесткого диска производится блоками (обычно 4 КБ), т.е. даже если нужно прочитать один байт - с диска всё равно читается весь блок. Поэтому формат файла был спроектирован так, чтобы вместо 4-8 чтений по 6 байт из разных частей файла, читался один блок в несколько КБ.

Меньше данных - выше скорость

Файл содержит специальный индекс первых байт (октетов), благодаря которому достигается следующие преимущества.

  1. Всего 3 байта вместо 4-х для хранение диапазона IP (да это кажется немного, но так мы убираем 25% бесполезных данных, при 2 млн. диапазонах экономия уже около 2 МБ).
  2. Сильно уменьшается диапазон выборки в основном индексе.
  3. Увеличивается скорость при поиске нужного 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.