surrealdb - リアルタイム Web 用のスケーラブルで分散型のコラボレーション ドキュメント グラフ データベース

(A scalable, distributed, collaborative, document-graph database, for the realtime web)

Created at: 2021-12-09 23:03:29
Language: Rust
License: NOASSERTION

SurrealDB アイコン


SurrealDB ロゴ SurrealDB ロゴ

シュールレアルDB シュールレアルDB
明日のアプリケーションのため の究極のクラウドデータベースです。

より簡単に開発します。より速く構築します。より迅速にスケーリングします。


         

     

ブログ   ギットハブ	  リンクトイン   ツイッター   ユーチューブ   開発   不和   スタックオーバーフロー


  SurrealDB とは?

SurrealDB は、Web、モバイル、サーバーレス、ジャムスタック、バックエンド、および従来のアプリケーション向けのエンド ツー エンドのクラウド ネイティブ データベースです。SurrealDB は、データベースと API スタックを簡素化し、ほとんどのサーバー側コンポーネントを不要にすることで最新のアプリケーションの開発時間を短縮し、安全でパフォーマンスの高いアプリをより迅速かつ安価に構築できるようにします。SurrealDB は、データベースと最新のリアルタイムの共同 API バックエンド レイヤーの両方として機能します。SurrealDB は、単一サーバーとして、または可用性と拡張性に優れた分散モードで実行できます。クライアント デバイスからの SQL クエリ、GraphQL、ACID トランザクション、WebSocket 接続、構造化データと非構造化データ、グラフ クエリ、フルテキスト インデックス作成がサポートされています。地理空間クエリ、および行ごとの権限ベースのアクセス。

機能、最新リリース、製品ロードマップ、およびドキュメントをご覧ください。

  コンテンツ

  特徴

  • [x] データベース サーバー、または組み込みライブラリ
  • [x] 複数行、複数テーブルの ACID トランザクション
  • [x] 単一ノード、または高度にスケーラブルな分散モード
  • [x] リンクと有向型グラフの接続を記録する
  • [x] 構造化データと非構造化データを保存する
  • [x] 事前計算された高度な分析のための増分計算ビュー
  • [x] リアルタイム API レイヤーと組み込みのセキュリティ権限
  • [x] テーブル、ドキュメント、およびグラフを使用して、あらゆる方法でデータを保存およびモデル化する
  • [x] フロントエンドおよびバックエンド開発のための単純なスキーマ定義
  • [x] Web ブラウザーやクライアント デバイスから直接接続してクエリを実行する
  • [x] 組み込みの JavaScript 関数をカスタムの高度な機能に使用する

  ドキュメンテーション

インストール、開発、展開、および管理のガイダンスについては、ドキュメントを参照してください。

  インストール

SurrealDB は、ターミナルから 1 つのコマンドを使用するだけで、インストールと実行が簡単になるように設計されています。従来のインストールに加えて、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://windows.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 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 granular access permissions for client and application access.

-- 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
;

  Why SurrealDB?

Database, API, and permissions

SurrealDB combines the database layer, the querying layer, and the API and authentication layer into one platform. Advanced table-based and row-based customisable access permissions allow for granular data access patterns for different types of users. There's no need for custom backend code and security rules with complicated database development.

データベース、API、権限

Tables, documents, and graph

As a multi-model database, SurrealDB enables developers to use multiple techniques to store and model data, without having to choose a method in advance. With the use of tables, SurrealDB has similarities with relational databases, but with the added functionality and flexibility of advanced nested fields and arrays. Inter-document record links allow for simple to understand and highly-performant related queries without the use of JOINs, eliminating the N+1 query problem.

表、文書、およびグラフ

Advanced inter-document relations and analysis. No JOINs. No pain.

With full graph database functionality SurrealDB enables more advanced querying and analysis. Records (or vertices) can be connected to one another with edges, each with its own record properties and metadata. Simple extensions to traditional SQL queries allow for multi-table, multi-depth document retrieval, efficiently in the database, without the use of complicated JOINs and without bringing the data down to the client.

高度な文書間関係

Simple schema definition for frontend and backend development

With SurrealDB, specify your database and API schema in one place, and define column rules and constraints just once. Once a schema is defined, database access is automatically granted to the relevant users. No more custom API code, and no more GraphQL integration. Simple, flexible, and ready for production in minutes not months.

単純なスキーマ定義

Connect and query directly from web-browsers and client devices

Connect directly to SurrealDB from any end-user client device. Run SurrealQL queries directly within web-browsers, ensuring that users can only view or modify the data that they are allowed to access. Highly-performant WebSocket connections allow for efficient bi-directional queries, responses and notifications.

ウェブブラウザから直接接続

Query the database with the tools you want

Your data, your choice. SurrealDB is designed to be flexible to use, with support for SurrealQL, GraphQL (coming soon), CRUD support over REST, and JSON-RPC querying and modification over WebSockets. With direct-to-client connection with in-built permissions, SurrealDB speeds up the development process, and fits in seamlessly into any tech stack.

複数の異なるクエリ方法

Realtime live queries and data changes direct to application

SurrealDB keeps every client device in-sync with data modifications pushed in realtime to the clients, applications, end-user devices, and server-side libraries. Live SQL queries allow for advanced filtering of the changes to which a client subscribes, and efficient data formats, including DIFFing and PATCHing enable highly-performant web-based data syncing.

リアルタイムのライブ クエリとデータ変更

Scale effortlessly to hundreds of nodes for high-availability and scalability

SurrealDB can be run as a single in-memory node, or as part of a distributed cluster - offering highly-available and highly-scalable system characteristics. Designed from the ground up to run in a distributed environment, SurrealDB makes use of special techniques when handling multi-table transactions, and document record IDs - with no use of table or row locks.

高可用性のために簡単にスケーリング

Extend your database with JavaScript functions

Embedded JavaScript functions allow for advanced, custom functionality, with computation logic being moved to the data layer. This improves upon the traditional approach of moving data to the client devices before applying any computation logic, ensuring that only the necessary data is transferred remotely. These advanced JavaScript functions, with support for the ES2020 standard, allow any developer to analyse the data in ever more simple-yet-advanced ways.

JavaScript を使用してデータベースを拡張する

Designed to be embedded or to run distributed in the cloud

単一のライブラリとして完全に Rust で構築された SurrealDB は、高度なクエリ機能を備えた組み込みデータベース ライブラリとしても、分散クラスターで動作するデータベース サーバーとしても使用できるように設計されています。メモリ使用量と CPU 要件が低いため、システム要件はあらゆるタイプの環境で実行できるように特別に検討されています。

組み込みまたはクラウドで使用できるように設計されています

  コミュニティ

SurrealDB に関するヘルプ、アイデア、ディスカッションを求めて、世界中で拡大しているコミュニティに参加してください。

  貢献する

ぜひ、 SurrealDB    の開発に参加してください。支援したい場合は、貢献ガイドでこのプロジェクトに貢献する方法について詳しく知ることができます。

  安全

セキュリティの問題については、GitHub に公開の問題を投稿する代わりに、脆弱性に関するポリシーを参照し、セキュリティ ポリシーを参照して、 security @surrealdb.com まで電子メールでお問い合わせください。

  ライセンス

SurrealDB のソース コードは、さまざまなライセンスの下でさまざまな形でライセンスされています。各ライセンスのコピーは、各リポジトリにあります。

詳細については、ライセンス情報を参照してください。