SurrealDBは、Web、モバイル、サーバーレス、ジャムスタック、バックエンド、および従来のアプリケーション向けのエンドツーエンドのクラウドネイティブデータベースです。SurrealDBは、データベースとAPIスタックを簡素化し、ほとんどのサーバー側コンポーネントの必要性を排除し、安全でパフォーマンスの高いアプリケーションをより迅速かつ安価に構築できるようにすることで、最新のアプリケーションの開発時間を短縮します。SurrealDBは、データベースと最新のリアルタイムのコラボレーションAPIバックエンドレイヤーの両方として機能します。SurrealDBは、クライアントデバイスからのSQLクエリ、GraphQL、ACIDトランザクション、WebSocket接続、構造化データと非構造化データ、グラフクエリ、フルテキストインデックス、地理空間クエリ、行ごとの権限ベースのアクセスをサポートし、単一のサーバーとして、または高可用性でスケーラブルな分散モードで実行できます。
機能、最新リリース、製品ロードマップ、およびドキュメントを表示します。
インストール、開発、デプロイ、および管理に関するガイダンスについては、ドキュメントを参照してください。
SurrealDBは、ターミナルから1つのコマンドを使用するだけで、インストールと実行が簡単になるように設計されています。従来のインストールに加えて、SurrealDBはHomeBrew、Docker、またはDocker Compose、Docker Swarm、Rancher、Kubernetesなどの他のコンテナオーケストレーションツールを使用してインストールして実行できます。
macOSでSurrealDBを使い始める最も簡単な方法は、自作を使用することです。これにより、コマンドラインツールとSurrealDBサーバーの両方が単一の実行可能ファイルとしてインストールされます。自作を使用していない場合は、以下のLinuxの手順に従ってSurrealDBをインストールしてください。
brew install surrealdb/tap/surreal
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
;
SurrealDB は、データベース層、クエリ層、API および認証層を 1 つのプラットフォームに結合します。高度なテーブルベースおよび行ベースのカスタマイズ可能なアクセス許可により、さまざまなタイプのユーザーに対してきめ細かいデータアクセスパターンが可能になります。複雑なデータベース開発を伴うカスタムバックエンドコードやセキュリティルールは必要ありません。
マルチモデルデータベースとして、SurrealDBを使用すると、開発者は事前に方法を選択しなくても、複数の手法を使用してデータを保存およびモデル化できます。テーブルを使用することで、SurrealDBはリレーショナルデータベースと類似していますが、高度なネストされたフィールドと配列の機能と柔軟性が追加されています。ドキュメント間レコード リンクを使用すると、JOIN を使用せずに簡単に理解でき、パフォーマンスの高い関連クエリが可能になり、N+1 クエリの問題が解消されます。
完全なグラフデータベース機能により、SurrealDBはより高度なクエリと分析を可能にします。レコード (または頂点) は、それぞれ独自のレコード プロパティとメタデータを持つエッジで相互に接続できます。従来のSQLクエリの単純な拡張により、複雑なJOINを使用したり、データをクライアントに取り込んだりすることなく、データベース内で効率的にマルチテーブル、マルチデプスドキュメントを取得できます。
SurrealDB を使用すると、データベースと API スキーマを 1 か所で指定し、列のルールと制約を一度だけ定義できます。スキーマが定義されると、関連するユーザーにデータベースアクセスが自動的に付与されます。カスタム API コードや GraphQL 統合はもう必要ありません。シンプルで柔軟性があり、数か月ではなく数分で生産準備が整います。
エンドユーザーのクライアントデバイスからSurrealDBに直接接続します。SurrealQL クエリを Web ブラウザー内で直接実行し、ユーザーがアクセスを許可されているデータのみを表示または変更できるようにします。高性能のWebSocket接続により、効率的な双方向のクエリ、応答、および通知が可能になります。
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.
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.
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.
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.
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.
Join our growing community around the world, for help, ideas, and discussions regarding SurrealDB.
ぜひシュールリアルDBの開発に関わってください!支援したい場合は、貢献ガイドでこのプロジェクトに貢献する方法について詳しく知ることができます。
セキュリティの問題については、脆弱性ポリシーとセキュリティポリシーを表示し、GitHub に公開問題を投稿する代わりに、security@surrealdb.com までメールでお問い合わせください。
SurrealDBのソースコードは、さまざまなライセンスの下でさまざまにライセンスされています。各ライセンスのコピーは、各リポジトリにあります。
詳細については、ライセンス情報を参照してください。