clockworklabs/SpacetimeDB

GitHub: clockworklabs/SpacetimeDB

将数据库与应用服务器合二为一的实时关系型数据库系统,支持在库内运行业务逻辑模块,专为低延迟实时应用设计。

Stars: 21845 | Forks: 798

SpacetimeDB Logo SpacetimeDB Logo

SpacetimeDB SpacetimeDB

Development at the speed of light.

         

 

     

Discord   Twitter   GitHub   Twitch   YouTube   LinkedIn   StackOverflow


## 什么是 [SpacetimeDB](https://spacetimedb.com)? 你可以把 SpacetimeDB 看作是一个数据库和服务器的结合体。 它是一个关系型数据库系统,允许你通过称为“模块”的高级存储过程将应用逻辑直接上传到数据库中。 无需部署一个位于客户端和数据库之间的 Web 或游戏服务器,你的客户端可以直接连接到数据库并在数据库内部执行你的应用逻辑。你可以像在普通服务器中那样,直接在你的模块中编写所有的权限和授权逻辑。 这意味着你可以用单一语言 Rust 编写整个应用程序,并将其部署为单个二进制文件。不再需要微服务,不再需要容器,不再需要 Kubernetes,不再需要 Docker,不再需要虚拟机,不再需要 DevOps,不再需要基础设施,不再需要运维,不再需要服务器。
SpacetimeDB Architecture

SpacetimeDB application architecture
(elements in white are provided by SpacetimeDB)

这实际上类似于智能合约的概念,只不过 SpacetimeDB 是一个数据库,与区块链没有任何关系,并且比任何智能合约系统都要快几个数量级。 事实上,它的速度快到我们的 MMORPG [BitCraft Online](https://bitcraftonline.com) 的整个后端仅仅是一个 SpacetimeDB 模块。我们没有运行任何其他服务器或服务,这意味着游戏中的所有内容、所有聊天消息、物品、资源、地形,甚至玩家的位置都由数据库存储和处理,然后实时同步给所有客户端。 SpacetimeDB 针对最大速度和最小延迟进行了优化,而不是批处理或 OLAP 工作负载。它专为游戏、聊天和协作工具等实时应用程序设计。 这种速度和低延迟是通过将所有应用程序状态保存在内存中,同时将数据持久化到预写式日志 (WAL) 中来实现的,该日志用于恢复应用程序状态。 ## 安装说明 你可以通过 `spacetime` CLI 工具将 SpacetimeDB 作为独立的数据库服务器运行。 受支持平台的安装说明如下。 同样的安装说明也可以在我们的网站 https://spacetimedb.com/install 上找到。 #### 在 macOS 上安装 在 macOS 上安装非常简单,只需运行我们的安装脚本。之后你可以使用 spacetime 命令来管理版本。 ``` curl -sSf https://install.spacetimedb.com | sh ``` #### 在 Linux 上安装 在 Linux 上安装非常简单,只需运行我们的安装脚本。之后你可以使用 spacetime 命令来管理版本。 ``` curl -sSf https://install.spacetimedb.com | sh ``` #### 在 Windows 上安装 在 Windows 上安装非常简单,只需将下面的代码片段粘贴到 PowerShell 中。如果你想改用 WSL,请遵循 Linux 的安装说明。 ``` iwr https://windows.spacetimedb.com -useb | iex ``` #### 从源码安装 关于从源码安装的简要说明:除非 `master` 中有尚未发布的功能,否则我们建议你不要从源码安装,请遵循官方安装说明。 ##### MacOS + Linux 在 macOS + Linux 上安装非常直接。首先,我们需要构建所有需要的二进制文件: ``` # 安装 rustup,如果你已经安装了 cargo 和 wasm32-unknown-unknown target,则可以跳过此步骤。 curl https://sh.rustup.rs -sSf | sh # 克隆 SpacetimeDB git clone https://github.com/clockworklabs/SpacetimeDB # 构建并安装 CLI cd SpacetimeDB cargo build --locked --release -p spacetimedb-standalone -p spacetimedb-update -p spacetimedb-cli # 创建目录 mkdir -p ~/.local/bin export STDB_VERSION="$(./target/release/spacetimedb-cli --version | sed -n 's/.*spacetimedb tool version \([0-9.]*\);.*/\1/p')" mkdir -p ~/.local/share/spacetime/bin/$STDB_VERSION # 安装 update binary cp target/release/spacetimedb-update ~/.local/bin/spacetime cp target/release/spacetimedb-cli ~/.local/share/spacetime/bin/$STDB_VERSION cp target/release/spacetimedb-standalone ~/.local/share/spacetime/bin/$STDB_VERSION ``` 在这个阶段,如果你还没有将 ~/.local/bin 添加到你的路径中,你需要添加它。 ``` # 请将以下行添加到你的 shell 配置中,并打开一个新的 shell 会话: export PATH="$HOME/.local/bin:$PATH" ``` 最后设置你的 SpacetimeDB 版本: ``` # 然后,在一个新的 shell 中,设置当前版本: spacetime version use $STDB_VERSION # 如果 STDB_VERSION 不再设置,你可以使用以下命令列出你的版本: spacetime version list ``` 你可以通过 `spacetime --version` 验证是否已安装正确的版本。 ##### Windows 在 Windows 上构建稍微复杂一些。你需要一个与大多数 Windows 终端预捆绑版本略有不同的 perl 版本。我们推荐 [Strawberry Perl](https://strawberryperl.com/)。你可能还需要访问 `openssl` 二进制文件,它实际上随 [Git for Windows](https://git-scm.com/downloads/win) 预先安装。此外,你需要为 Windows 安装 [rustup](https://rustup.rs/)。 在 Git for Windows shell 中,你应该看到类似这样的内容: ``` $ which perl /c/Strawberry/perl/bin/perl $ which openssl /mingw64/bin/openssl $ which cargo /c/Users//.cargo/bin/cargo ``` 如果看起来正确,那么你就可以继续了! ``` # 克隆 SpacetimeDB git clone https://github.com/clockworklabs/SpacetimeDB # 构建并安装 CLI cd SpacetimeDB cargo build --locked --release -p spacetimedb-standalone -p spacetimedb-update -p spacetimedb-cli # 创建目录 $stdbDir = "$HOME\AppData\Local\SpacetimeDB" $stdbVersion = & ".\target\release\spacetimedb-cli" --version | Select-String -Pattern 'spacetimedb tool version ([0-9.]+);' | ForEach-Object { $_.Matches.Groups[1].Value } New-Item -ItemType Directory -Path "$stdbDir\bin\$stdbVersion" -Force | Out-Null # 安装 update binary Copy-Item "target\release\spacetimedb-update.exe" "$stdbDir\spacetime.exe" Copy-Item "target\release\spacetimedb-cli.exe" "$stdbDir\bin\$stdbVersion\" Copy-Item "target\release\spacetimedb-standalone.exe" "$stdbDir\bin\$stdbVersion\" ``` 现在将我们刚刚创建的目录添加到你的路径中。我们建议将其添加到系统路径中,因为这样它将对你所有的应用程序(包括 Unity3D)可用。完成此操作后,重启你的 shell! ``` %USERPROFILE%\AppData\Local\SpacetimeDB ``` 最后,打开一个新的 shell 并使用已安装的 SpacetimeDB 版本: ``` spacetime version use $stdbVersion # 如果 stdbVersion 不再设置,请使用以下命令列出版本: spacetime version list ``` 你可以通过 `spacetime --version` 验证是否已安装正确的版本。 如果你使用的是 Git for Windows,你可以按照以下说明操作: ``` # 克隆 SpacetimeDB git clone https://github.com/clockworklabs/SpacetimeDB # 构建并安装 CLI cd SpacetimeDB # 构建 CLI binaries - 这在 windows 上需要一段时间,所以去喝杯咖啡吧 :) cargo build --locked --release -p spacetimedb-standalone -p spacetimedb-update -p spacetimedb-cli # 创建目录 export STDB_VERSION="$(./target/release/spacetimedb-cli --version | sed -n 's/.*spacetimedb tool version \([0-9.]*\);.*/\1/p')" mkdir -p ~/AppData/Local/SpacetimeDB/bin/$STDB_VERSION # 安装 update binary cp target/release/spacetimedb-update ~/AppData/Local/SpacetimeDB/spacetime cp target/release/spacetimedb-cli ~/AppData/Local/SpacetimeDB/bin/$STDB_VERSION cp target/release/spacetimedb-standalone ~/AppData/Local/SpacetimeDB/bin/$STDB_VERSION # 现在将我们刚刚创建的目录添加到你的路径中。我们建议将其添加到系统路径中,因为这样它将对你的所有应用程序(包括 Unity3D)可用。完成此操作后,重启你的 shell! # %USERPROFILE%\AppData\Local\SpacetimeDB # 设置当前版本 spacetime version use $STDB_VERSION ``` 你可以通过 `spacetime --version` 验证是否已安装正确的版本。 #### 使用 Docker 运行 如果你更喜欢在容器中运行 Spacetime,可以使用以下命令启动一个新实例。 ``` docker run --rm --pull always -p 3000:3000 clockworklabs/spacetime start ``` ## 文档 有关 SpacetimeDB 的更多信息、入门指南、游戏开发指南和参考材料,请参阅我们的[文档](https://spacetimedb.com/docs)。 ## 快速开始 我们为每种受支持的语言准备了几份快速入门指南,以帮助你尽快上手 SpacetimeDB。你可以在我们的[文档页面](https://spacetimedb.com/docs)上找到它们。 总之,开始使用 SpacetimeDB 只有 4 个步骤。 1. 安装 `spacetime` CLI 工具。 2. 使用 `spacetime start` 启动 SpacetimeDB 独立节点。 3. 使用我们支持的某种模块语言编写并上传模块。 4. 使用我们的客户端库之一连接到数据库。 你可以在下面查看受支持语言的摘要,以及每种语言的快速入门指南链接。 ## 语言支持 你可以用多种流行语言编写 SpacetimeDB 模块,未来还会支持更多! #### 服务端库 - [Rust](https://spacetimedb.com/docs/modules/rust/quickstart) - [C#](https://spacetimedb.com/docs/modules/c-sharp/quickstart) #### 客户端库 - [Rust](https://spacetimedb.com/docs/sdks/rust/quickstart) - [C#](https://spacetimedb.com/docs/sdks/c-sharp/quickstart) - [Typescript](https://spacetimedb.com/docs/sdks/typescript/quickstart) ## 许可证 SpacetimeDB 根据 BSL 1.1 许可证授权。这不是开源或免费软件许可证,但是,它在几年后会转换为带有链接例外的 AGPL v3.0 许可证。 请注意,AGPL v3.0 通常不包含链接例外。我们在 SpacetimeDB 的 AGPL 许可证中添加了自定义链接例外。我们选择免费软件许可证的动机是确保对 SpacetimeDB 的贡献能回馈给社区。我们明确表示不想强迫 SpacetimeDB 的用户在与 SpacetimeDB 链接时将其自己的代码开源,因此我们需要包含一个链接例外。
标签:BSL协议, ClockworkLabs, Rust, Serverless, SpacetimeDB, Wasm, WebAssembly, WebSocket, 云数据库, 低延迟, 依赖分析, 关系型数据库, 分布式系统, 可视化界面, 响应大小分析, 实时后端, 实时多人游戏, 数据同步, 数据库, 无服务器, 游戏后端, 网络流量审计, 请求拦截, 通知系统, 通知系统, 通知系统