大多數 SQL 資料庫引擎是以獨立的伺服器程序來實作。想要存取資料庫的程式會使用某種程序間通訊(通常是 TCP/IP)與伺服器通訊,以將請求傳送到伺服器並接收結果。SQLite 並非如此運作。使用 SQLite 時,想要存取資料庫的程序會直接從磁碟上的資料庫檔案進行讀寫。沒有中間的伺服器程序。
無伺服器架構有利有弊。主要的優點是無需安裝、設定、初始化、管理和排除獨立伺服器程序的故障。這就是 SQLite 成為「零設定」資料庫引擎的原因之一。使用 SQLite 的程式在執行前不需要管理支援來設定資料庫引擎。任何能夠存取磁碟的程式都能夠使用 SQLite 資料庫。
另一方面,使用伺服器的資料庫引擎可以更好地防範用戶端應用程式中的錯誤 - 用戶端中的雜散指標不會損毀伺服器上的記憶體。而且由於伺服器是一個持續運行的程序,它能夠更精確地控制資料庫存取,從而實現更細粒度的鎖定和更好的並行性。
大多數 SQL 資料庫引擎都是基於用戶端/伺服器架構。據作者所知,在無伺服器架構的資料庫引擎中,SQLite 是唯一允許多個應用程式同時存取同一個資料庫的引擎。
(本節於 2018 年 4 月 2 日新增)
最近,人們開始使用「無伺服器」一詞來表示與本文檔中預期含義略有不同的含義。以下是「無伺服器」的兩種可能定義:
傳統無伺服器:資料庫引擎與應用程式在相同的程序、執行緒和位址空間中運行。沒有訊息傳遞或網路活動。
新式無伺服器:資料庫引擎在與應用程式不同的命名空間中運行,可能在不同的機器上,但資料庫是由託管服務提供商以 turnkey 服務的形式提供,不需要應用程式所有者進行管理或維護,而且使用起來非常簡單,以至於開發人員可以認為資料庫是無伺服器的,即使它實際上在幕後使用了伺服器。
SQLite 是一個傳統無伺服器資料庫引擎的例子。使用 SQLite 時,除了主機電腦作業系統和檔案系統之外,沒有其他程序、執行緒、機器或其他機制來協助提供資料庫服務或實作。真的沒有伺服器。
Microsoft Azure Cosmos DB 和 Amazon S3 是新式無伺服器資料庫的例子。這些資料庫是由在雲端中獨立運行的伺服器程序來實作。但伺服器是由網路服務供應商維護和管理,而不是由應用程式開發人員維護和管理。應用程式開發人員只需使用該服務即可。開發人員不必配置、設定或管理資料庫伺服器執行個體,因為所有這些工作都由服務提供商自動處理。資料庫伺服器實際上是存在的,只是對開發人員隱藏了。
理解「無伺服器」的這兩種不同定義非常重要。當一個資料庫聲稱是「無伺服器」時,請務必辨別它們指的是「傳統無伺服器」還是「新式無伺服器」。
本頁面最後修改時間:2024 年 2 月 13 日 17:39:19 UTC