十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

SurrealDB:一条命令启动的多模型数据库

SurrealDB:一条命令启动的多模型数据库 SurrealDB一条命令启动的多模型数据库【免费下载链接】surrealdbA scalable, distributed, collaborative, document-graph database, for the realtime web项目地址: https://gitcode.com/GitHub_Trending/su/surrealdb核心关键词SurrealDB 多模型数据库长尾关键词SurrealDB 快速安装与启动、SurrealDB 内存存储与磁盘存储、SurrealDB 图查询 RELATE、SurrealDB 实时查询 live query、SurrealDB Docker 部署你写一条取某用户的帖子和好友的查询可用户表在 Postgres、关系在图数据库、标签在文档数据库权限判断还得在 API 层手写一层。SurrealDB 是用 Rust 写的多模型数据库把文档、图、关系型收进同一个引擎权限与实时推送都内置。 一句话说清 SurrealDB 是什么SurrealDB 是一个多模型数据库文档、图、关系型可强制 schema 也可不强制、时序、地理位置、键值六种形态共用一套引擎和同一个查询语言 SurrealQL一种 SQL 风格的查询语言你可以把它理解为会写图遍历的 SQL。它同时兼任 API 后端行级权限写在表定义里由数据库本身强制客户端可以直接连上来查不用你在中间再垫一层鉴权代码。边界也要说清楚——它不是托管平台部署形态嵌进应用里、单机服务、分布式集群要你自己选本文只讲自己部署这一侧。 从启动到第一条查询的最快路径全程用 Docker不用在本地装任何东西。第 1 步起一个内存版开发服务。memory表示数据放在内存里不落盘、重启即失正好用来试水docker run --rm --pull always --name surrealdb -p 8000:8000 \ surrealdb/surrealdb:latest start --log info --user root --pass root memory--user/--pass顺手把 root 账号建好了后面连接要用。第 2 步打开 SQL 交互终端连上去。镜像里自带 CLI--ns和--db是 SurrealDB 的两级命名空间不先选定它们你的数据就像没找到目录docker exec -it surrealdb /surreal sql -e http://localhost:8000 \ -u root -p root --ns demo --db demo --pretty第 3 步建表并插入第一条记录直接键入 SurrealQLDEFINE TABLE person; CREATE person SET name Tobie, marketing true;第 4 步查回来验证SELECT * FROM person;看到刚写入的记录就说明整条链路通了。如果你已经通过其他途径装好了surreal命令安装方式以项目仓库 README 为准上面第 1、2 步就简化成surreal start --log info --user root --pass root memory加surreal sql。 它到底怎么 work 的第一个关键点同一个 Rust 代码库跑法是可选的。它可以作为库嵌进你的应用进程可以编译成 WebAssembly 在浏览器里跑也可以像上面那样作为服务端单节点运行甚至多个节点组成分布式集群。存储层是可插拔的后端内存、RocksDB、TiKV 等选哪个在启动时通过参数决定——相当于一个程序既能当桌面应用装也能当服务端跑数据落在哪你自己挑。第二个关键点一切都写成 SQL 声明。表结构DEFINE TABLE、字段类型与校验DEFINE FIELD ... TYPE string ASSERT ...、唯一索引、变更事件DEFINE EVENT、权限PERMISSIONS FOR select WHERE ...全部用 SurrealQL 声明在 schema 里。schema 就是你和前端、客户端之间唯一的契约改一处所有连接方同时生效。第三个关键点关系是一等公民而且能订阅。用RELATE建的是一条带属性的有向边查询时用-边-直接做多级遍历不需要 JOIN 也不要把数据拉到客户端再拼再叠加 live query——订阅一次之后这条数据变了服务端会主动推给订阅方做协作编辑、实时通知这类需求不用自己轮询。RELATE user:tobie-write-article:surreal SET time.written time::now();⚙️ 四个真正影响体验的配置存储参数memory还是rocksdb:/路径→ 决定数据放内存还是写成本地磁盘文件 → 感受内存版最快但容器一停数据全没切到rocksdb:前缀后重启还在本地开发想留数据就换它。--user/--pass→ 指定 root 账号凭据也可用环境变量SURREAL_USER/SURREAL_PASS→ 感受忘了设连接时就没有能登录的人生产环境务必改掉默认的root/root。表级SCHEMAFULL/SCHEMALESS→ 声明后是否强制校验字段定义 → 感受SCHEMAFULL的表会拒绝写入未声明的字段前后端共用同一份结构约束SCHEMALESS则随意写适合探索期数据。--log info或SURREAL_LOG→ 日志详细程度 → 感受排查查询卡在哪时提到debug/trace日常跑info就够避免日志刷爆终端。 环境兼容与已知边界运行形态macOS、Linux、Windows 单节点均可也可分布式集群同时支持嵌入进程和 WASM 浏览器内运行。从源码构建官方 CI 覆盖 macOS、Ubuntu、WindowsWindows 下编译需要管理员权限musl、树莓派等交叉编译目标目前尚未打通具体以仓库 doc/BUILDING.md 实际状态为准。存储后端memory、RocksDB、TiKV、SurrealKV 等通过构建特性与启动参数选择详见仓库Cargo.toml的 features 列表。许可核心代码为 BSL 1.1SDK 与相关库为 Apache 2.0 / MIT。版本号以项目仓库实际为准当前工作区标注为 3.1.0-alpha说明仍处于快速迭代期升级前先看发布说明。️ 踩坑了先看这里现象服务重启后数据没了→ 大概率原因启动时用的是memory引擎数据只存在 RAM 里 → 处理动作把存储参数换成rocksdb:/你的数据目录再启动。现象surreal sql连上了查询却返回空→ 大概率原因没选 NS/DB或者和你写数据时用的命名空间不是同一套 → 处理动作连接时带上--ns和--db核对账号一致。现象连接 8000 端口被拒或端口被占用→ 大概率原因端口映射或绑定地址被别的服务占用 → 处理动作换映射-p 8080:8000并同步修改连接地址或查一下主机上 8000 端口的占用情况。 让它持续可用升级与回滚CLI 自带surreal upgrade处理数据升级参数以仓库surrealdb/server/src/cli/upgrade.rs为准Docker 部署时回滚就是改回旧镜像 tag 重启。数据出入与体检surreal export/surreal import做数据迁移surreal validate校验 schema。日志与遥测--log管普通日志--log-otel-level单独管 OpenTelemetry 追踪粒度仓库dev/docker目录里有一套现成的可观测栈Prometheus Grafana Tempo开发时直接docker compose拉起来。如果你的项目现在要同时伺候几个数据库、再垫一层 API 代码做权限和拼装SurrealDB 的思路是把这份胶水收进一份 schema 声明里——少维护的系统往往比多一套更少的出问题的系统。【免费下载链接】surrealdbA scalable, distributed, collaborative, document-graph database, for the realtime web项目地址: https://gitcode.com/GitHub_Trending/su/surrealdb创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表