19 puntos por GN⁺ 2025-04-11 | 5 comentarios | Compartir por WhatsApp
  • SpacetimeDB es un sistema que combina base de datos y funciones de servidor
  • En lugar de tener por separado un servidor web o de juegos tradicional, el cliente se conecta directamente a la base de datos para ejecutar la lógica de la aplicación
  • Permite subir directamente la lógica de la app a la base de datos mediante procedimientos almacenados en forma de "módulos" escritos en Rust
  • Toda la aplicación puede desplegarse como un único binario de Rust, por lo que no se necesitan DevOps, contenedores, servidores ni microservicios

Características principales

  • Es un concepto similar a los contratos inteligentes, pero no tiene relación con blockchain
  • Es mucho más rápido que los sistemas tradicionales de contratos inteligentes
  • El backend del juego MMORPG BitCraft Online está compuesto únicamente por SpacetimeDB
  • Todos los elementos dentro del juego se procesan en tiempo real en la base de datos y se sincronizan con el cliente
  • Está optimizado para aplicaciones en tiempo real y diseñado con el objetivo de minimizar la latencia
  • El estado de la aplicación se mantiene en memoria y se registra en el WAL (Write-Ahead Log) para su recuperación

Cómo instalarlo

Instalación en macOS / Linux

Instalación en Windows

Ejecutarlo con Docker

  • Si usas Docker
    docker run --rm --pull always -p 3000:3000 clockworklabs/spacetime start

4 pasos para empezar

  1. Instalar la herramienta CLI spacetime
  2. Ejecutar un solo nodo con el comando spacetime start
  3. Escribir y subir un módulo en uno de los lenguajes compatibles
  4. Conectarse a la base de datos con una librería cliente

Soporte de lenguajes

Módulos del lado del servidor

Librerías cliente

Información de licencia

  • Usa la licencia BSL 1.1
  • Después de cierto tiempo cambia a AGPL v3.0 + excepción de enlace
  • No exige publicar el código fuente de las aplicaciones integradas con SpacetimeDB
  • Es un modelo de licencia de software libre diseñado para que las contribuciones regresen a la comunidad

Documentación oficial

5 comentarios

 
ethanhur 2025-04-11

Es una idea interesante. Me da curiosidad saber cómo resolvieron bien cosas como DDoS o la autenticación.

 
turastory 2025-04-11

El nombre sí que tiene muchísimo estilo.

 
jujumilk3 2025-04-11

De verdad pensé que era algo muy novedoso y que se veía muy bien, pero resulta que ya le había puesto estrella en GitHub hace muchísimo tiempo. Mi memoria...

 
xguru 2025-04-11

SpaceTimeDB - combinando la BD y el servidor en uno

Lo presentaron hace un año y medio, y veo que lo han seguido actualizando muy bien. Parece que también recibieron inversión de a16z y Supercell.

 
GN⁺ 2025-04-11
Comentarios en Hacker News
  • SpacetimeDB pertenece a una categoría tecnológica de "reestructuración del pensamiento a escala cósmica". Esto tiene el potencial de mejorar mucho el rendimiento mediante una reorganización estructural

    • Este tipo de tecnologías exige que los desarrolladores reordenen su forma de pensar, y es difícil distinguir si el problema es que la tecnología aún no ha sido adoptada por completo, o si su promesa no encaja con casos de uso específicos
    • Tecnologías similares serían Elixir y Node, donde hay que adoptar todo el stack y aceptar nuevas limitaciones para obtener garantías poco comunes
    • Estas tecnologías tienen más probabilidades de triunfar cuando pioneros con una visión clara muestran sus fortalezas en proyectos open source
    • Ojalá Clockwork Labs logre entregar con éxito su juego de ejemplo
  • Mejor comentario de la publicación anterior:

    • SpacetimeDB es una base de datos de propósito general, con baja latencia y soporte para procedimientos almacenados en WASM
    • Parece un bloque de construcción sólido para mundos persistentes de juegos multijugador
    • Hay que implementar por cuenta propia el netcode que oculte la latencia
  • SpacetimeDB fue desarrollado para impulsar BitCraft, un MMORPG masivo

    • Fue diseñado para ajustarse a los requisitos de rendimiento del juego
    • Presume una latencia muy baja y un alto rendimiento
    • Si quieres construir un MMO nuevo, conviene mirar los enfoques del mercado actual
    • Tomando como ejemplo a World of Warcraft, la confiabilidad del cliente y la coordinación de eventos del servidor son la clave de los hacks de escalabilidad
  • Cuesta entender cómo escribir servidores de juego usando esta tecnología

    • Cuando hay que simular en el servidor la física, el pathfinding, las animaciones, etc., no queda claro cómo integrarlo
    • Normalmente se usa el modo headless de Unreal/Unity, pero con SpacetimeDB parece que habría que descartar el motor de juego y reimplementar todo desde cero
  • BitCraft se ve adorable

    • Ver el término de precios "maincloud" me generó un sesgo personal, pero al parecer solo es un nombre para créditos de hosting
  • YouTube recomienda SpacetimeDB, pero nunca ha hecho videojuegos

    • Me gustaría que desarrolladores de juegos opinaran sobre qué tan útil es realmente esta tecnología
    • Es difícil juzgar cuánto de esto es simplemente buen marketing
  • Este proyecto está cubierto por BSL y tiene una limitación de tiempo algo pesada

    • Solo se permite una instancia por servicio
  • No hay que confundir el esquema de una base de datos relacional con la forma en que una app procesa los datos

    • Se necesita control explícito y conviene evitar la magia basada en anotaciones
  • Me pregunto si tiene sentido correr la base de datos localmente en juegos para un solo jugador

    • Dudo que haya ventajas en ejecutar todo el estado del juego a través de una base de datos local
    • Si existiera un administrador de estado robusto como software separado, parecería que solo habría que escribir el motor gráfico
  • Parece ser una base de datos en memoria, con un runtime de WASM para alojar la lógica de dominio

    • No está claro cómo maneja la escalabilidad y el clustering
    • Parece que uno mismo tiene que encargarse de la partición de datos
    • La replicación y la consistencia son la parte difícil en una base de datos distribuida
    • Se pueden usar tanto tablas en memoria como basadas en disco
    • Las bases de datos comunes ya hacen esto, y escribir la lógica de dominio en procedimientos almacenados es engorroso
    • Por ahora, incluir sqlite en un binario como tabla en memoria parece equivalente
    • Hay que escribir el código para publicar actualizaciones de tablas a los clientes
    • Hay documentación sobre clustering, pero no es concreta