2023 年 9 月 28 日

Edge 上的 SQLite:Prisma 對 Turso 的支援已進入早期訪問階段

Turso 是一個基於 libSQL 的邊緣託管分散式資料庫,libSQL 是 SQLite 的一個開源、開放貢獻的分支,它能讓資料更接近您的應用程式,從而最大程度地減少查詢延遲。

我們很高興地宣佈,Prisma ORM 正在新增對 Turso 的早期訪問支援。讓我們深入瞭解一下!

SQLite on the Edge: Prisma Support for Turso is in Early Access

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 功能標誌是我們正在努力的驅動介面卡計劃的一部分,旨在使您能夠使用其他資料庫驅動連線到您的資料庫。示例驅動介面卡包括 PlanetScaleNeon 和 libSQL。我們將很快分享更多細節!如果您尚未完成,請填寫此調查,並留下您的電子郵件地址以獲取更新。

先決條件

您需要安裝以下工具

如果您沒有現有使用 SQLite 的專案,可以使用 try-prisma 設定一個專案。導航到您的工作目錄並複製以下命令來設定專案

導航到專案並在您首選的程式碼編輯器中開啟它

在 Turso 上建立資料庫

首先,在 Turso 上建立一個您的應用程式將使用的資料庫。此步驟對於建立配置 Turso 資料庫客戶端所需的憑據至關重要。

  1. 要建立資料庫,請在您的終端中執行以下命令

    Turso 還會在離您最近的區域建立一個數據庫。

  2. 建立一個身份驗證令牌,它將允許您連線到資料庫

  3. 接下來,顯示連線字串詳細資訊以連線到您的資料庫

    請記下身份驗證令牌和連線字串,它們將在下一步中用於連線到您的資料庫。

使用 Prisma 連線到 Turso

開始使用 Turso

  1. 在您的 Prisma schema 中啟用 driverAdapters 預覽功能標誌

  2. 使用“在 Turso 上建立資料庫”步驟中的值建立或更新您的 .env 檔案

  3. 建立初始遷移

  4. 將遷移應用到您的 Turso 資料庫

  5. 安裝最新版本的 Prisma Client

  6. 安裝 libSQL 資料庫客戶端和 Prisma Client 的驅動介面卡

  7. 使用以下程式碼片段更新您的 Prisma Client 例項

就是這樣!

您現在可以使用 Prisma Client 開始查詢您的 Turso 資料庫了。

如果您克隆了 typescript/script 示例,您可以執行 npm run dev 來插入和查詢資料,以確認您的更改已成功。

接下來做什麼

上述設定使用一個單個遠端資料庫。您可以透過設定資料庫副本來進一步。當您建立副本時,Turso 會自動為讀取查詢選擇離您的應用程式最近的副本。無需額外的邏輯來定義讀取查詢的路由方式。寫入查詢將轉發到主資料庫。

嘗試一下並分享您的反饋!如果您發現任何缺失或遇到錯誤,我們鼓勵您建立問題


超越遠端 SQLite:嵌入式副本

雖然 Turso 允許您在全球範圍內複製 SQLite,但如果您能消除從應用程式到遠端副本的額外網路跳躍呢?如果……您可以將資料庫移動到應用程式內部呢?

藉助 Turso 新釋出的嵌入式副本,您可以在應用程式內部擁有主遠端資料庫的副本,類似於嵌入式/本地 SQLite 資料庫的工作方式。您可以使用 Prisma 對 Turso 的新支援在您的應用程式中嘗試此功能。

A meme gif of a person having their mind blown.

嵌入式副本如何工作?

當您的應用程式首次與資料庫建立連線時,遠端主資料庫將執行查詢

然後 Turso 將 (1) 在您的應用程式內部建立一個*嵌入式副本*,並 (2) 將資料從主資料庫複製到該副本,使其在本地可用

嵌入式副本將滿足後續的讀取查詢。libSQL 客戶端提供了一個 sync() 方法,您可以呼叫它以確保嵌入式副本的資料保持最新。

透過嵌入式副本,這種設定保證了您的應用程式速度快,因為資料將在本地隨時可用。

與您可能熟悉的讀取副本設定類似,寫入操作會轉發到遠端主資料庫並執行,然後傳播到所有嵌入式副本。

  1. 寫入操作的傳播被轉發到資料庫。
  2. 資料庫將步驟 1 中的更新響應給伺服器。
  3. 寫入操作傳播到資料庫副本。

嵌入式副本對查詢的影響

為了展示嵌入式副本的速度,我們建立了兩個使用相同主資料庫的示例應用程式——其中一個變體使用了嵌入式副本。

對於此示例測試,將使用以下查詢

以下是應用程式啟動時相同查詢的計時截圖

不使用嵌入式副本

時間:154.390 毫秒

使用嵌入式副本

時間:7.883 毫秒

查詢響應時間從 154.390 毫秒顯著下降到 7.883 毫秒

如果您想親自嘗試,可以在 GitHub 上找到這兩個示例應用程式

嵌入式副本有什麼用?

嵌入式副本是 Turso 的一個相對較新的功能,但您可以使用它們的一些用例包括:

  • 提高 API 的讀取效能:嵌入式副本可以透過 Prisma Client 將嵌入式資料庫連線到您的應用程式,從而消除連線到遠端資料庫伺服器的網路成本。
  • 替代您的快取服務:嵌入式副本可以與 Prisma Client 擴充套件配對以進行查詢響應,使您的應用程式更快,因為資料始終保持最新。

這種新的資料庫副本方法將帶來哪些其他用例,我們拭目以待。

親自嘗試一下!

我們迫不及待地想看到您使用 Turso 和 Prisma 構建什麼。我們鼓勵您親自嘗試並告訴我們您的想法

我們還在努力支援其他無伺服器資料庫驅動和邊緣函式部署。請完成這份簡短的調查,並留下您的電子郵件地址以獲取更新。

請務必在 TwitterDiscord 上與我們分享您的作品。🙌

不要錯過下一篇文章!

訂閱 Prisma 新聞通訊

© . This site is unofficial and not affiliated with Prisma Data, Inc.