Об этом проекте

Tile38 — это открытая (лицензия MIT) in-memory база данных геолокаций, пространственный индекс и сервер геозон в реальном времени. Он поддерживает различные типы объектов, включая точки широты/долготы, ограничивающие прямоугольники, XYZ-тайлы, геохеши, QuadKeys и GeoJSON. Ключевые функции включают: - Пространственный индекс с методами поиска, такими как Nearby, Within и Intersects - Геозоны в реальном времени через вебхуки или pub/sub-каналы - Поддержка нескольких протоколов: HTTP, websockets, telnet и Redis RESP - Ответы сервера в формате RESP или JSON - Полный интерфейс командной строки (tile38-cli) - Репликация ведущий/ведомый - In-memory база данных с сохранением на диск - Экспорт метрик Prometheus Система состоит из трех компонентов: tile38-server (сервер), tile38-cli (интерфейс командной строки) и tile38-benchmark (инструмент для бенчмаркинга сервера). Tile38 может быть развернут с помощью предварительно собранных бинарных файлов для OSX, Linux, FreeBSD и Windows, Docker или Homebrew на macOS. Код полностью написан на Go и поддерживает как 32-битные, так и 64-битные системы. Возможности поиска включают фильтрацию по значениям полей (WHERE), сопоставление ID объектов (MATCH), итерацию на основе курсора, исключение полей (NOFIELDS) и ограничение результатов (LIMIT). Выражения WHERE поддерживают сопоставление с регулярными выражениями с использованием движка re2 от Go. Геозоны позволяют преобразовать любой стандартный поиск в монитор геозоны, добавив ключевое слово FENCE. Сервер уведомляет клиентов в реальном времени, когда объекты входят, выходят или пересекают границы, с типами обнаружения, включая inside, outside, enter, exit и cross. Уведомления о геозонах могут доставляться через вебхуки или pub/sub-каналы. Поля — это дополнительные данные, прикрепленные к объектам, хранящиеся как значения с плавающей точкой двойной точности, без ограничения на количество полей на объект. Tile38 имеет специализированные клиентские библиотеки для Go, Node.js, Python, TypeScript, Rust, Swift и Java, а также совместим с большинством клиентских библиотек Redis благодаря нативной поддержке протокола RESP.