Формат файлу

Формат файлу 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. 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.9 24.89 24.90.0.0
...

Як бачите у всіх діапазонів перший байт однаковий (у середньому на кожен перший байт припадає по 7-9 тисяч діапазонів). У вибірці таких IP буде кілька сотень. Отже перевіряти перший байт у разі марна трата часу, він в усіх однаковий.

Менше перетворення даних

При пошуку потрібного IP не проводиться перетворення з бінарного рядка на ціле число (як це робиться у всіх конкурентів, а найчастіше ще й з цими числами потім якісь арифметичні операції робляться).

У Sypex Geo все максимально спрощено, просто порівняння двох 3-байтових рядків, у тому ж вигляді, в якому вони прочитані з файлу - ніяких перетворень.

Прості структури зберігання даних

Зберігання довідників міст і регіонів у найпростішому вигляді, числа зберігаються в бінарному вигляді, рядки з нульовими символами в кінці. Так досягається максимальна продуктивність при вилученні даних, і навіть компактність зберігання даних. Жодних JSON або XML, на парсинг яких йде купа часу.

Відкритість

Формат спочатку створювався з розрахунком на відкритість і можливість користувачам самостійно створювати файли у форматі Sypex Geo. Відповідно будуть опубліковані як специфікації самого формату, так і інструменти для створення файлів БД. Вони будуть опубліковані після виходу зі стадії бети та закріплення специфікацій формату, а то можливі ще невеликі зміни.

Універсальність

Також передбачена можливість зберігання в БД будь-яких даних користувача, а не тільки стандартної інформації про країни та міста.

Можете також ознайомитися зі специфікацією формату Sypex Geo 2.2.