Sobre o projeto

Tile38 é um armazenamento de dados geoespaciais em memória, índice espacial e servidor de geofencing em tempo real, de código aberto (licenciado sob MIT). Ele suporta uma variedade de tipos de objetos, incluindo pontos de latitude/longitude, caixas delimitadoras, tiles XYZ, Geohashes, QuadKeys e GeoJSON. Os principais recursos incluem: - Índice espacial com métodos de busca como Nearby, Within e Intersects - Geofencing em tempo real através de webhooks ou canais pub/sub - Suporte a múltiplos protocolos: HTTP, websockets, telnet e Redis RESP - Respostas do servidor em formato RESP ou JSON - Interface de linha de comando completa (tile38-cli) - Replicação líder/seguidor - Banco de dados em memória com persistência em disco - Exportação de métricas Prometheus O sistema consiste em três componentes: tile38-server (o servidor), tile38-cli (interface de linha de comando) e tile38-benchmark (ferramenta de benchmark do servidor). O Tile38 pode ser implantado via binários pré-compilados para OSX, Linux, FreeBSD e Windows, Docker ou Homebrew no macOS. O código-fonte é escrito inteiramente em Go e suporta sistemas de 32 e 64 bits. Os recursos de busca incluem filtragem por valores de campos (WHERE), correspondência de IDs de objetos (MATCH), iteração baseada em cursor, exclusão de campos (NOFIELDS) e limitação de resultados (LIMIT). Expressões WHERE suportam correspondência regex usando o motor re2 do Go. O geofencing permite que qualquer busca padrão seja convertida em um monitor de cerca geográfica adicionando a palavra-chave FENCE. O servidor notifica os clientes em tempo real quando objetos entram, saem ou cruzam limites, com tipos de detecção incluindo inside, outside, enter, exit e cross. As notificações de cerca geográfica podem ser entregues via webhooks ou canais pub/sub. Os campos são dados extras anexados aos objetos, armazenados como valores de ponto flutuante de dupla precisão, sem limite no número de campos por objeto. O Tile38 possui bibliotecas de cliente dedicadas para Go, Node.js, Python, TypeScript, Rust, Swift e Java, além de compatibilidade com a maioria das bibliotecas de cliente Redis devido ao seu suporte nativo ao protocolo RESP.