一、概述
EdgeDB是一種基于PostgreSQL的新型的圖關系資料庫,它的設計目标是成為一個高度可擴充和靈活的資料庫,旨在解決傳統關系資料庫和NoSQL資料庫所存在的瓶頸。EdgeDB支援複雜的資料模型、資料類型和查詢語言,并提供了一種直覺的資料模組化和查詢工具,可以廣泛應用于各種企業級應用場景。
傳統的關系資料庫和NoSQL資料庫都存在一些瓶頸,比如:
1. 資料模組化複雜
傳統的關系資料庫需要在模組化時預先确定表結構,而NoSQL資料庫則需要在模組化時預先确定文檔結構。這種固定的資料結構不利于應對資料模型的變化和資料結構的複雜性。
2. 查詢語言限制
傳統關系資料庫的查詢語言SQL過于複雜,難以編寫和維護;而NoSQL資料庫的查詢語言則通常隻能支援部分SQL功能,難以滿足複雜查詢的需求。
3. 資料一緻性問題
傳統關系資料庫使用事務來確定資料一緻性,但事務對性能的影響較大;而NoSQL資料庫通常采用最終一緻性模型,無法保證資料的強一緻性。
EdgeDB通過支援靈活的資料模型和查詢語言,以及提供強一緻性的資料管理,解決了這些痛點。
二、功能特征
1. 靈活的資料模型
EdgeDB支援多種資料類型,包括标量類型、複合類型、數組類型、枚舉類型等,可以輕松應對各種資料模型。
2. 直覺的查詢語言
EdgeQL是EdgeDB的查詢語言,它具有簡潔而直覺的文法,能夠輕松地進行複雜的查詢操作。
3. 強一緻性
EdgeDB使用基于複制的強一緻性模型來確定資料的一緻性。這種模型能夠在不影響性能的情況下保證資料的強一緻性。
4. 高度可擴充
EdgeDB采用分布式架構,可以輕松地擴充到多個節點,進而提高系統的可擴充性和可用性。
5. 安全性
EdgeDB提供了多種安全機制,包括SSL/TLS加密、身份驗證和通路控制等,保護資料的安全性。
三、架構設計
EdgeDB 的整體架構比較簡單,主要分為這幾部分:
1. 資料存儲引擎
EdgeDB采用了PostgreSQL作為其存儲引擎,使用B樹索引結構對資料進行存儲和管理。EdgeDB存儲引擎支援ACID事務和MVCC并發控制,可以保證資料的一緻性和可靠性。
2. SQL解釋器
EdgeDB的SQL解釋器負責解析和執行SQL語句,包括EdgeQL指令。解釋器可以将SQL語句轉換成内部資料結構,然後将其傳遞給存儲引擎進行處理。
3. 查詢優化器:
EdgeDB的查詢優化器可以對查詢語句進行優化以及緩存,以提高查詢的性能和效率。查詢優化器可以根據查詢的特點和資料分布情況,選擇最優的查詢計劃。
4. 多版本并發控制
EdgeDB的多版本并發控制可以支援多個事務同時通路同一資料,避免了資料的沖突和競争問題。多版本并發控制可以提高資料庫的并發性能和可用性。
四、安裝部署
EdgeDB可以在Linux、macOS和Windows等作業系統上運作。這裡,我們以在Linux下的安裝為例。
1. 導入 EdgeDB 打包密鑰
sudo mkdir -p /usr/local/share/keyrings && \
sudo curl --proto '=https' --tlsv1.2 -sSf \
-o /usr/local/share/keyrings/edgedb-keyring.gpg \
https://packages.edgedb.com/keys/edgedb-keyring.gpg
2. 添加 EdgeDB 包倉庫
echo deb [signed-by=/usr/local/share/keyrings/edgedb-keyring.gpg]\
https://packages.edgedb.com/apt \
$(grep "VERSION_CODENAME=" /etc/os-release | cut -d= -f2) main \
| sudo tee /etc/apt/sources.list.d/edgedb.list
3. 安裝 EdgeDB
sudo apt-get update && sudo apt-get install edgedb-2
安裝完成後,可以使用EdgeDB指令行工具來建立資料庫執行個體、建立表格、插入資料、查詢資料等操作。
五、使用示例
以下是四個簡單的EdgeDB使用示例,包括增删改查操作。
1. 建立表格和插入資料
CREATE TYPE Person {
name: str,
age: int32,
email: str,
};
CREATE TABLE persons OF Person;
INSERT persons {
name := 'Alice',
age := 30,
email := '[email protected]',
};
以上示例建立了一個名為Person的資料類型,包含三個字段name、age和email。然後建立了一個名為persons的表格,表格類型為Person。最後插入了一條資料到persons表格中。
2. 查詢資料
SELECT persons
FILTER .name = 'Alice'
以上示例查詢了persons表格中name字段為“Alice”的所有資料。
3. 更新資料
UPDATE persons
SET {
age := 31,
}
FILTER .name = 'Alice'
以上示例将persons表格中name字段為“Alice”的資料的age字段更新為31。
4. 删除資料
DELETE persons
FILTER .name = 'Alice'
以上示例删除了persons表格中name字段為“Alice”的資料。
六、相關資源
- edgeDB官網:https://www.edgedb.com/
- edgeDB文檔:https://www.edgedb.com/docs
- edgeDB開源倉庫:https://github.com/edgedb/edgedb