19 pontos por GN⁺ 2025-04-11 | 5 comentários | Compartilhar no WhatsApp
  • SpacetimeDB é um sistema que combina banco de dados e funcionalidades de servidor
  • Em vez de manter separadamente um servidor web ou de jogos tradicional, o cliente se conecta diretamente ao banco de dados para executar a lógica da aplicação
  • É possível enviar diretamente para o banco de dados a lógica do app por meio de procedures armazenadas no formato de "módulos" escritos em Rust
  • Toda a aplicação pode ser implantada como um único binário Rust, sem necessidade de DevOps, contêineres, servidores ou microsserviços

Principais recursos

  • O conceito é semelhante ao de smart contracts, mas não tem relação com blockchain
  • É muito mais rápido do que sistemas tradicionais de smart contracts
  • O backend do jogo MMORPG BitCraft Online é composto apenas por SpacetimeDB
  • Todos os elementos dentro do jogo são processados em tempo real no banco de dados e sincronizados com o cliente
  • É otimizado para aplicações em tempo real e foi projetado com o objetivo de minimizar a latência
  • O estado da aplicação é mantido em memória e registrado em um WAL (Write-Ahead Log) para recuperação

Como instalar

Instalação no macOS / Linux

Instalação no Windows

Executar com Docker

  • Se você usa Docker
    docker run --rm --pull always -p 3000:3000 clockworklabs/spacetime start

4 etapas para começar

  1. Instalar a ferramenta de CLI spacetime
  2. Executar um nó único com o comando spacetime start
  3. Escrever e enviar um módulo em uma das linguagens suportadas
  4. Conectar ao banco de dados com uma biblioteca cliente

Suporte a linguagens

Módulos do lado do servidor

Bibliotecas cliente

Informações de licença

  • Segue a licença BSL 1.1
  • Após um determinado período, muda para AGPL v3.0 + exceção de linking
  • Não exige a divulgação do código-fonte de aplicações integradas ao SpacetimeDB
  • Um modelo de licença de software livre projetado para que as contribuições retornem à comunidade

Documentação oficial

5 comentários

 
ethanhur 2025-04-11

Ideia interessante. Fico curioso para saber como eles resolveram bem coisas como DDoS e autenticação.

 
turastory 2025-04-11

Só o nome já é estiloso pra caramba.

 
jujumilk3 2025-04-11

Achei realmente bem inovador e pareceu muito bom, mas pelo visto eu já tinha dado estrela no GitHub faz tempo. Minha memória...

 
xguru 2025-04-11

SpaceTimeDB - combinando DB e servidor em um só

Tinha sido apresentado há um ano e meio, e continua sendo bem atualizado. A a16z e a Supercell também investiram nele.

 
GN⁺ 2025-04-11
Comentários do Hacker News
  • O SpacetimeDB pertence ao gênero tecnológico de "reorganização do pensamento cósmico". Isso traz a possibilidade de melhorar muito o desempenho por meio de uma reorganização estrutural

    • Esse tipo de tecnologia exige que os desenvolvedores reorganizem sua forma de pensar, e é difícil distinguir se o problema é a tecnologia ainda não ter sido totalmente adotada ou se a promessa dela não se encaixa em certos casos de uso
    • Tecnologias semelhantes incluem Elixir e Node, nas quais é preciso adotar toda a stack e aceitar novas limitações para obter garantias raras
    • Tecnologias assim têm mais chance de dar certo quando pioneiros com uma visão clara demonstram seus pontos fortes em projetos open source
    • Espero que a Clockwork Labs consiga entregar com sucesso o jogo de exemplo deles
  • Melhores comentários da postagem anterior:

    • O SpacetimeDB é um banco de dados genérico, com suporte a baixa latência e stored procedures em WASM
    • Parece um bloco de construção sólido para mundos persistentes de jogos multiplayer
    • Você ainda precisa implementar por conta própria o netcode que mascara a latência
  • O SpacetimeDB foi desenvolvido para dar suporte ao BitCraft, um MMORPG em larga escala

    • Foi projetado de acordo com os requisitos de desempenho do jogo
    • Oferece latência muito baixa e alta taxa de processamento
    • Se você quiser criar um MMO novo, vale a pena observar como o mercado existente aborda isso
    • Usando o exemplo de World of Warcraft, a confiabilidade do cliente e a coordenação de eventos no servidor são o núcleo dos hacks de escalabilidade
  • É difícil entender como escrever um servidor de jogo usando essa tecnologia

    • Fico pensando como integrar isso quando é necessário simular no servidor física, pathfinding, animação etc.
    • Em geral se usa o modo headless do Unreal/Unity, mas com o SpacetimeDB parece que seria preciso abandonar a game engine e reimplementar tudo do zero
  • O BitCraft parece fofo

    • Fiquei com um preconceito pessoal ao ver o termo de precificação "maincloud", mas isso é apenas um nome para créditos de hospedagem
  • O YouTube recomenda o SpacetimeDB, mas nunca fez videogames

    • Gostaria que desenvolvedores de jogos dessem sua opinião sobre o quanto essa tecnologia é realmente útil
    • É difícil julgar o quanto disso é só marketing bem feito
  • Este projeto é coberto pela BSL e tem um limite de tempo um tanto pesado

    • Só é permitida uma instância por serviço
  • Não se deve confundir o esquema de banco de dados relacional com a forma como o app processa os dados

    • É necessário controle explícito e evitar mágica via anotações
  • Fico me perguntando se faz sentido rodar um banco de dados localmente em um jogo single-player

    • Tenho dúvidas se há vantagem em fazer todo o estado do jogo passar por um banco de dados local
    • Se existisse um gerenciador de estado robusto como software separado, talvez bastasse escrever apenas a engine gráfica
  • Parece ser um banco de dados em memória, com um runtime WASM para hospedar a lógica de domínio

    • Não está claro como ele lida com escalabilidade e clustering
    • Parece que você mesmo precisa fazer o particionamento dos dados
    • Replicação e consistência são as partes difíceis em bancos de dados distribuídos
    • É possível usar tanto tabelas em memória quanto em disco
    • Bancos de dados comuns já fazem isso, e escrever a lógica de domínio em stored procedures é trabalhoso
    • Por enquanto, embutir o sqlite como tabelas em memória em um arquivo binário parece equivalente
    • Você precisa escrever o código que publica atualizações de tabelas para o cliente
    • Há documentação sobre clustering, mas ela não é específica o bastante