86个版本 (50个稳定版)

新版本 2.0.20240823 2024年8月23日
2.0.20240730 2024年7月31日
2.0.0-1.5.20240330 2024年3月31日
1.4.20240308 2024年3月9日

#72数据库实现

Download history 111/week @ 2024-04-29 287/week @ 2024-05-06 265/week @ 2024-05-13 263/week @ 2024-05-20 426/week @ 2024-05-27 66/week @ 2024-06-03 586/week @ 2024-06-10 722/week @ 2024-06-17 141/week @ 2024-06-24 881/week @ 2024-07-01 235/week @ 2024-07-08 161/week @ 2024-07-15 285/week @ 2024-07-22 602/week @ 2024-07-29 382/week @ 2024-08-05 319/week @ 2024-08-12

每月 1,588 次下载
2 个crate中使用 (通过 surrealdb-nightly)

自定义许可

3MB
99K SLoC


SurrealDB Logo

SurrealDB 是面向未来应用的
终极云数据库

开发更简单。   构建更快。   扩展更迅速。


一个可扩展的、分布式的、协作的、文档图数据库,适用于实时网络。


     

博客   GitHub   领英   Twitter   YouTube   Dev   Discord   StackOverflow


  什么是SurrealDB?

SurrealDB是一个端到端云原生数据库,适用于网页、移动、无服务器、Jamstack、后端和传统应用程序。SurrealDB通过简化数据库和API堆栈,去除大部分服务器端组件,从而缩短现代应用程序的开发时间,让您更快、更便宜地构建安全、高性能的应用程序。SurrealDB既充当数据库,也充当现代实时协作API后端层。SurrealDB可以作为单个服务器运行,也可以以高可用性和高可扩展的分布式模式运行 - 支持从客户端设备进行SQL查询、GraphQL、ACID事务、WebSocket连接、结构化和非结构化数据、图查询、全文索引、地理空间查询以及基于权限的逐行访问。

查看功能、最新的发布、产品的路线图文档

  功能

  • 数据库服务器或嵌入式库
  • 多行、多表ACID事务
  • 单节点或高度可扩展的分布式模式
  • 记录链接和有向类型图连接
  • 存储结构化和非结构化数据
  • 用于预计算高级分析的增量计算视图
  • 实时API层,内置安全权限
  • 使用表格、文档和图以任何方式存储和建模数据
  • 简单模式定义,适用于前端和后端开发
  • 直接从网络浏览器和客户端设备连接和查询
  • 使用嵌入式JavaScript函数来实现自定义高级功能

  文档

有关安装、开发、部署和管理方面的指导,请参阅我们的文档

  安装

SurrealDB设计得易于安装和运行——只需在终端中运行一条命令。除了传统的安装方式外,SurrealDB还可以通过HomeBrew、Docker或其他容器编排工具(如Docker Compose、Docker Swarm、Rancher)或Kubernetes来安装和运行。

  在macOS上安装

在macOS上快速开始使用SurrealDB的方法是使用Homebrew。这将安装命令行工具和SurrealDB服务器作为单个可执行文件。如果您不使用Homebrew,请按照下面的Linux安装说明安装SurrealDB。

brew install surrealdb/tap/surreal

  在Linux上安装

在Unix操作系统上快速开始使用SurrealDB的最简单和首选方法是安装并使用SurrealDB命令行工具。在您的终端中运行以下命令,并遵循屏幕上的说明。

curl -sSf https://install.surrealdb.com | sh

  在Windows上安装

在Windows上快速开始使用SurrealDB的最简单和首选方法是安装并使用SurrealDB命令行工具。在您的终端中运行以下命令,并遵循屏幕上的说明。

iwr https://install.surrealdb.com -useb | iex

  使用Docker运行

可以使用Docker来管理和运行SurrealDB数据库实例,无需安装任何命令行工具。SurrealDB Docker容器包含从运行中的服务器导入和导出数据的完整命令行工具,或用于运行服务器本身。

docker run --rm -p 8000:8000 surrealdb/surrealdb:latest start

更新镜像到最新版本

docker pull surrealdb/surrealdb:latest

  入门

SurrealDB的入门与启动SurrealDB数据库服务器、选择您的平台并将SDK集成到您的代码中一样简单。您可以通过阅读我们的教程之一轻松开始使用您选择的平台。

客户端应用程序
服务器端代码

  快速浏览

使用强类型数据类型,数据可以直接在数据库中进行全面建模。

UPDATE person SET
	waist = <int> "34.59",
	height = <float> 201,
	score = <decimal> 0.3 + 0.3 + 0.3 + 0.1
;

存储在检索时计算的动态计算字段。

CREATE person SET
	birthday = "2007-06-22",
	can_drive = <future> { time::now() > birthday + 18y }
;

轻松处理无结构或结构化数据,在无模式或全模式模式下工作。

-- Create a schemafull table
DEFINE TABLE user SCHEMAFULL;

-- Specify fields on the user table
DEFINE FIELD name ON TABLE user TYPE object;
DEFINE FIELD name.first ON TABLE user TYPE string;
DEFINE FIELD name.last ON TABLE user TYPE string;
DEFINE FIELD email ON TABLE user TYPE string ASSERT string::is::email($value);

-- Add a unique index on the email field preventing duplicate values
DEFINE INDEX email ON TABLE user COLUMNS email UNIQUE;

-- Create a new event whenever a user changes their email address
DEFINE EVENT email ON TABLE user WHEN $before.email != $after.email THEN (
	CREATE event SET user = $this, time = time::now(), value = $after.email, action = 'email_changed'
);

使用完全有向图边连接连接记录。

-- Add a graph edge between user:tobie and article:surreal
RELATE user:tobie->write->article:surreal
	SET time.written = time::now()
;

-- Add a graph edge between specific users and developers
LET $from = (SELECT users FROM company:surrealdb);
LET $devs = (SELECT * FROM user WHERE tags CONTAINS 'developer');
RELATE $from->like->$devs UNIQUE
	SET time.connected = time::now()
;

使用高级表达式和图查询灵活查询数据。

-- Select a nested array, and filter based on an attribute
SELECT emails[WHERE active = true] FROM person;

-- Select all 1st, 2nd, and 3rd level people who this specific person record knows, or likes, as separate outputs
SELECT ->knows->(? AS f1)->knows->(? AS f2)->(knows, likes AS e3 WHERE influencer = true)->(? AS f3) FROM person:tobie;

-- Select all person records (and their recipients), who have sent more than 5 emails
SELECT *, ->sent->email->to->person FROM person WHERE count(->sent->email) > 5;

-- Select other products purchased by people who purchased this laptop
SELECT <-purchased<-person->purchased->product FROM product:laptop;

-- Select products purchased by people in the last 3 weeks who have purchased the same products that we purchased
SELECT ->purchased->product<-purchased<-person->(purchased WHERE created_at > time::now() - 3w)->product FROM person:tobie;

存储 GeoJSON 地理数据类型,包括点、线和多边形。

UPDATE city:london SET
	centre = (-0.118092, 51.509865),
	boundary = {
		type: "Polygon",
		coordinates: [[
			[-0.38314819, 51.37692386], [0.1785278, 51.37692386],
			[0.1785278, 51.61460570], [-0.38314819, 51.61460570],
			[-0.38314819, 51.37692386]
		]]
	}
;

使用 JavaScript 函数编写自定义嵌入逻辑。

CREATE film SET
	ratings = [
		{ rating: 6, user: user:bt8e39uh1ouhfm8ko8s0 },
		{ rating: 8, user: user:bsilfhu88j04rgs0ga70 },
	],
	featured = function() {
		return this.ratings.filter(r => {
			return r.rating >= 7;
		}).map(r => {
			return { ...r, rating: r.rating * 10 };
		});
	}
;

为客户端和应用访问指定细粒度访问权限。

-- Specify access permissions for the 'post' table
DEFINE TABLE post SCHEMALESS
	PERMISSIONS
		FOR select
			-- Published posts can be selected
			WHERE published = true
			-- A user can select all their own posts
			OR user = $auth.id
		FOR create, update
			-- A user can create or update their own posts
			WHERE user = $auth.id
		FOR delete
			-- A user can delete their own posts
			WHERE user = $auth.id
			-- Or an admin can delete any posts
			OR $auth.admin = true
;

  社区

加入我们全球不断壮大的社区,获取有关 SurrealDB 的帮助、想法和讨论。

  贡献

我们非常希望您能参与 SurrealDB 的开发!如果您想帮忙,可以在 贡献指南 中了解更多关于如何为此项目做出贡献的信息。

  安全

关于安全问题,请通过电子邮件发送至 [email protected],而不是在 GitHub 上发布公开问题。

  许可

SurrealDB 的源代码在不同的许可证下进行了许可。每个存储库中都可以找到每种许可证的副本。

有关更多信息,请参阅许可信息

依赖项

~43–68MB
~1M SLoC