Миллиард
Аманда обратила внимание, что в субботу американский картограф залил в базу линию с круглым номером — 1 000 000 000.
Практического смысла в таких событиях нет, зато это повод отметить рост OpenStreetMap. Как в феврале можно было отпраздновать стамиллионный пакет правок, в апреле — точку 2³³, а скоро мы увидим десятимиллиардную точку.
Таких ошибок, как восемь лет назад, когда номера точек перевалили за 32-битный лимит, и многие приложения сломались, мы уже не допускаем. Или..? Что произойдёт через пару лет, когда номера линий тоже выйдут за 2³², требуя другого типа данных для их хранения? Когда чинили типы для точек, все ли попутно увеличили лимит для линий?
Некоторые готовятся уже сегодня. Например, Overpass API. В нём есть отдельный тип данных, area (области). Его идентификаторы генерируются из идентификатора линий или отношений, добавлением фиксированного очень большого числа. Но что выглядело большим десять лет назад, теперь пугающе близко к настоящим номерам. Для линий выделено окошко всего в 1,2 миллиарда значений. В следующем году нумерация area на замкнутых линиях в Overpass API начнёт пересекаться с областями на отношениях.
В версии 0.7.57 Overpass API, вышедшей в октябре, такая нумерация областей больше не поддерживается. Автор переписал обработку замкнутых линий, и теперь нужно пользоваться либо запросами на поиск области по названию и местоположению, либо кодом way(1234567); map_to_area;.
Хитрости с числами рано или поздно выходят боком. Вспомним проблему 2000 или даты в GPS. Хочется сказать: не делайте так. Но такие оптимизации помогают сделать алгоритмы быстрее и уменьшить их требования к памяти. Аккуратное отношение к типам данных помогло, например, когда-то запихнуть движок OSRM внутрь мобильного приложения MAPS.ME.
Так что решение — не мешок побольше, а постоянная поддержка. Заходить раз в пару лет в репозиторий и проверять, что предположения, сделанные годы назад, ещё верны. Жаль, что в мире открытых исходников популярность не означает денег на поддержку, и некоторые инструменты устаревают просто потому, что некому поменять несколько букв в исходном коде.