Turso 是什麼?它與 SQLite 有何不同?
SQLite 是一個獨立的、基於檔案的開源資料庫,以其可移植性、可靠性和效能而聞名,即使在記憶體較低的環境中也表現出色。由於其速度,它也是小型 Web 應用程式的完美選擇。
然而,擴充套件 SQLite 帶來了挑戰
- 手動備份
- 缺乏開箱即用的複製功能
- 在無伺服器環境中持久化資料的困難
- 在多伺服器設定中託管的困難
其中一些挑戰可以透過諸如 LiteFS 之類的工具來解決,它為 SQLite 提供了複製和資料庫備份功能。
另一方面,Turso 透過建立 libSQL 解決了上述挑戰 — libSQL 是 SQLite 的一個分支,添加了 SQLite 尚未支援的功能。libSQL 允許您分發和複製 SQLite,透過 HTTP 連線,執行非同步操作,並將 SQLite 作為主要資料庫或主要資料庫的副本嵌入到其他程式中。
Prisma + Turso = 🚀
雖然 Prisma 自 2019 年首次釋出以來一直支援 SQLite,但 libSQL 與 SQLite 有所不同。例如,libSQL 使用 HTTP 連線到資料庫並使用遠端檔案而非本地檔案,這使得 Prisma 和 Turso 迄今為止都不相容。
今天,我們很高興地宣佈,Prisma 對 Turso 的支援現已進入早期訪問階段!
開始使用 Prisma 和 Turso
要在您的專案中開始使用 Turso,您必須首先啟用 driverAdapters 預覽功能標誌。這將允許您使用 Turso 的驅動介面卡查詢您的資料庫。
driverAdapters功能標誌是我們正在努力的驅動介面卡計劃的一部分,旨在使您能夠使用其他資料庫驅動連線到您的資料庫。示例驅動介面卡包括 PlanetScale、Neon 和 libSQL。我們將很快分享更多細節!如果您尚未完成,請填寫此調查,並留下您的電子郵件地址以獲取更新。
先決條件
您需要安裝以下工具
如果您沒有現有使用 SQLite 的專案,可以使用 try-prisma 設定一個專案。導航到您的工作目錄並複製以下命令來設定專案
導航到專案並在您首選的程式碼編輯器中開啟它
在 Turso 上建立資料庫
首先,在 Turso 上建立一個您的應用程式將使用的資料庫。此步驟對於建立配置 Turso 資料庫客戶端所需的憑據至關重要。
-
要建立資料庫,請在您的終端中執行以下命令
Turso 還會在離您最近的區域建立一個數據庫。
-
建立一個身份驗證令牌,它將允許您連線到資料庫
-
接下來,顯示連線字串詳細資訊以連線到您的資料庫
請記下身份驗證令牌和連線字串,它們將在下一步中用於連線到您的資料庫。
使用 Prisma 連線到 Turso
開始使用 Turso
-
在您的 Prisma schema 中啟用
driverAdapters預覽功能標誌 -
使用“在 Turso 上建立資料庫”步驟中的值建立或更新您的
.env檔案 -
建立初始遷移
-
將遷移應用到您的 Turso 資料庫
-
安裝最新版本的 Prisma Client
-
安裝 libSQL 資料庫客戶端和 Prisma Client 的驅動介面卡
-
使用以下程式碼片段更新您的 Prisma Client 例項
就是這樣!
您現在可以使用 Prisma Client 開始查詢您的 Turso 資料庫了。
如果您克隆了 typescript/script 示例,您可以執行 npm run dev 來插入和查詢資料,以確認您的更改已成功。
接下來做什麼
上述設定使用一個單個遠端資料庫。您可以透過設定資料庫副本來進一步。當您建立副本時,Turso 會自動為讀取查詢選擇離您的應用程式最近的副本。無需額外的邏輯來定義讀取查詢的路由方式。寫入查詢將轉發到主資料庫。
嘗試一下並分享您的反饋!如果您發現任何缺失或遇到錯誤,我們鼓勵您建立問題。
超越遠端 SQLite:嵌入式副本
雖然 Turso 允許您在全球範圍內複製 SQLite,但如果您能消除從應用程式到遠端副本的額外網路跳躍呢?如果……您可以將資料庫移動到應用程式內部呢?
藉助 Turso 新釋出的嵌入式副本,您可以在應用程式內部擁有主遠端資料庫的副本,類似於嵌入式/本地 SQLite 資料庫的工作方式。您可以使用 Prisma 對 Turso 的新支援在您的應用程式中嘗試此功能。
嵌入式副本如何工作?
當您的應用程式首次與資料庫建立連線時,遠端主資料庫將執行查詢
然後 Turso 將 (1) 在您的應用程式內部建立一個*嵌入式副本*,並 (2) 將資料從主資料庫複製到該副本,使其在本地可用
嵌入式副本將滿足後續的讀取查詢。libSQL 客戶端提供了一個 sync() 方法,您可以呼叫它以確保嵌入式副本的資料保持最新。
透過嵌入式副本,這種設定保證了您的應用程式速度快,因為資料將在本地隨時可用。
與您可能熟悉的讀取副本設定類似,寫入操作會轉發到遠端主資料庫並執行,然後傳播到所有嵌入式副本。
- 寫入操作的傳播被轉發到資料庫。
- 資料庫將步驟 1 中的更新響應給伺服器。
- 寫入操作傳播到資料庫副本。
嵌入式副本對查詢的影響
為了展示嵌入式副本的速度,我們建立了兩個使用相同主資料庫的示例應用程式——其中一個變體使用了嵌入式副本。
對於此示例測試,將使用以下查詢
以下是應用程式啟動時相同查詢的計時截圖
不使用嵌入式副本
時間:154.390 毫秒
使用嵌入式副本
時間:7.883 毫秒
查詢響應時間從 154.390 毫秒顯著下降到 7.883 毫秒。
如果您想親自嘗試,可以在 GitHub 上找到這兩個示例應用程式
嵌入式副本有什麼用?
嵌入式副本是 Turso 的一個相對較新的功能,但您可以使用它們的一些用例包括:
- 提高 API 的讀取效能:嵌入式副本可以透過 Prisma Client 將嵌入式資料庫連線到您的應用程式,從而消除連線到遠端資料庫伺服器的網路成本。
- 替代您的快取服務:嵌入式副本可以與 Prisma Client 擴充套件配對以進行查詢響應,使您的應用程式更快,因為資料始終保持最新。
這種新的資料庫副本方法將帶來哪些其他用例,我們拭目以待。
親自嘗試一下!
我們迫不及待地想看到您使用 Turso 和 Prisma 構建什麼。我們鼓勵您親自嘗試並告訴我們您的想法。
我們還在努力支援其他無伺服器資料庫驅動和邊緣函式部署。請完成這份簡短的調查,並留下您的電子郵件地址以獲取更新。
請務必在 Twitter 或 Discord 上與我們分享您的作品。🙌
不要錯過下一篇文章!
訂閱 Prisma 新聞通訊