2023 年 9 月 28 日

邊緣 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 等工具來解決,LiteFS 為 SQLite 提供複寫和資料庫備份。

另一方面,Turso 通過建立 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 結構描述中啟用 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 會自動為您的應用程式選擇最近的複本來進行讀取查詢。不需要額外的邏輯來定義應如何處理讀取查詢的路由。寫入查詢將轉發到主資料庫。

試用一下並分享您的回饋!如果您發現缺少某些內容或遇到錯誤,我們鼓勵您建立 issue


超越遠端 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 電子報