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

シュールリアルDBアイコン


シュールリアルDBロゴ シュールリアルDBロゴ

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

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


         

     

ブログ   ギットハブ   リンクトイン   囀る   ユーチューブ   デベロップメント   不和   スタックオーバーフロー


シュールリアルDBとは何ですか?

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を使い始める最も簡単な方法は、自作を使用することです。これにより、コマンドラインツールとSurrealDBサーバーの両方が単一の実行可能ファイルとしてインストールされます。自作を使用していない場合は、以下のLinuxの手順に従ってSurrealDBをインストールしてください。

brew install surrealdb/tap/surreal

Linuxにインストール

UnixオペレーティングシステムでSurrealDBを使用するための最も簡単で好ましい方法は、SurrealDBコマンドラインツールをインストールして使用することです。ターミナルで次のコマンドを実行し、画面の指示に従います。

curl --proto '=https' --tlsv1.2 -sSf https://install.surrealdb.com | sh

現在リリースされているものよりも新しいバイナリが必要な場合は、毎晩インストールできます。

curl --proto '=https' --tlsv1.2 -sSf https://install.surrealdb.com | sh -s -- --nightly

ウィンドウズにインストール

Windows で SurrealDB を使い始める最も簡単で好ましい方法は、SurrealDB コマンドライン ツールをインストールして使用することです。ターミナルで次のコマンドを実行し、画面の指示に従います。

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

ドッカーを使用して実行する

Dockerを使用すると、コマンドラインツールをインストールしなくても、SurrealDBデータベースインスタンスを管理および実行できます。SurrealDB Docker コンテナーには、実行中のサーバーからデータをインポートおよびエクスポートしたり、サーバー自体を実行したりするための完全なコマンドラインツールが含まれています。

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

メモリ内で実行されているデモサーバーを使い始めたばかりの場合は、コンテナに基本的な初期化を渡して、ユーザーとパスワードをrootとして設定し、ロギングを有効にしてlocalhostへのアクセスを制限できます(本番環境では実行しないでください)。

docker run --rm --name surrealdb -p 127.0.0.1:8000:8000 surrealdb/surrealdb:latest start --log trace --user root --pass root memory

イメージを最新バージョンに更新するには:

docker pull surrealdb/surrealdb:latest

はじめ

SurrealDB を使い始めるのは、SurrealDB データベースサーバーを起動し、プラットフォームを選択し、その SDK をコードに統合するのと同じくらい簡単です。チュートリアルの1つを読むことで、選択したプラットフォームを簡単に開始できます。

クライアント側アプリ
サーバー側のコード

クイックルック

厳密に型指定されたデータ型を使用すると、データベース内でデータを完全にモデル化できます。

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

なぜシュールリアルDBなのか?

データベース、API、およびアクセス許可

SurrealDB は、データベース層、クエリ層、API および認証層を 1 つのプラットフォームに結合します。高度なテーブルベースおよび行ベースのカスタマイズ可能なアクセス許可により、さまざまなタイプのユーザーに対してきめ細かいデータアクセスパターンが可能になります。複雑なデータベース開発を伴うカスタムバックエンドコードやセキュリティルールは必要ありません。

データベース、API、およびアクセス許可

テーブル、ドキュメント、グラフ

マルチモデルデータベースとして、SurrealDBを使用すると、開発者は事前に方法を選択しなくても、複数の手法を使用してデータを保存およびモデル化できます。テーブルを使用することで、SurrealDBはリレーショナルデータベースと類似していますが、高度なネストされたフィールドと配列の機能と柔軟性が追加されています。ドキュメント間レコード リンクを使用すると、JOIN を使用せずに簡単に理解でき、パフォーマンスの高い関連クエリが可能になり、N+1 クエリの問題が解消されます。

テーブル、ドキュメント、グラフ

高度なドキュメント間の関係と分析。結合なし。痛みはありません。

完全なグラフデータベース機能により、SurrealDBはより高度なクエリと分析を可能にします。レコード (または頂点) は、それぞれ独自のレコード プロパティとメタデータを持つエッジで相互に接続できます。従来のSQLクエリの単純な拡張により、複雑なJOINを使用したり、データをクライアントに取り込んだりすることなく、データベース内で効率的にマルチテーブル、マルチデプスドキュメントを取得できます。

高度なドキュメント間関係

フロントエンドおよびバックエンド開発のためのシンプルなスキーマ定義

SurrealDB を使用すると、データベースと API スキーマを 1 か所で指定し、列のルールと制約を一度だけ定義できます。スキーマが定義されると、関連するユーザーにデータベースアクセスが自動的に付与されます。カスタム API コードや GraphQL 統合はもう必要ありません。シンプルで柔軟性があり、数か月ではなく数分で生産準備が整います。

単純なスキーマ定義

Webブラウザとクライアントデバイスから直接接続してクエリを実行

エンドユーザーのクライアントデバイスからSurrealDBに直接接続します。SurrealQL クエリを Web ブラウザー内で直接実行し、ユーザーがアクセスを許可されているデータのみを表示または変更できるようにします。高性能のWebSocket接続により、効率的な双方向のクエリ、応答、および通知が可能になります。

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

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.

Multiple different query methods

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.

Realtime live queries and data changes

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.

Scale effortlessly for high-availability

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.

Extend your database with JavaScript

Designed to be embedded or to run distributed in the cloud

Built entirely in Rust as a single library, SurrealDB is designed to be used as both an embedded database library with advanced querying functionality, and as a database server which can operate in a distributed cluster. With low memory usage and cpu requirements, the system requirements have been specifically thought through for running in all types of environment.

Designed to be embedded or in the cloud

  Community

Join our growing community around the world, for help, ideas, and discussions regarding SurrealDB.

貢献

ぜひシュールリアルDBの開発に関わってください!支援したい場合は、貢献ガイドでこのプロジェクトに貢献する方法について詳しく知ることができます。

安全

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

ライセンス

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

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