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