什麼是 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
功能標誌是我們正在努力進行的驅動程式適配器計畫的一部分,旨在讓您可以使用其他資料庫驅動程式來連接到您的資料庫。驅動程式適配器範例包括 PlanetScale、Neon 和 libSQL。我們很快會分享更多詳細資訊!如果您尚未填寫 此問卷,請留下您的電子郵件地址以獲取更新。
先決條件
您需要安裝以下工具
如果您沒有現有的使用 SQLite 的專案,您可以使用 try-prisma
設定專案。導航到您的工作目錄並複製以下命令以設定專案
導航到專案並在您偏好的程式碼編輯器中開啟它
在 Turso 上建立資料庫
首先,在 Turso 上建立您的應用程式將使用的資料庫。此步驟對於建立配置 Turso 資料庫用戶端所需的憑證是必要的。
-
要建立資料庫,請在您的終端機上執行以下命令
Turso 還將在最靠近您所在位置的區域建立資料庫。
-
建立身份驗證令牌,以便您連接到資料庫
-
接下來,顯示連線字串詳細資訊以連接到您的資料庫
記下身份驗證令牌和連線字串,它們將在下一步中用於連接到您的資料庫。
使用 Prisma 連接到 Turso
開始使用 Turso
-
在您的 Prisma 結構描述中啟用
driverAdapters
預覽功能標誌 -
使用「在 Turso 上建立資料庫」步驟中的值,建立或更新您的
.env
檔案以及環境變數 -
建立初始遷移
-
將遷移應用於您的 Turso 資料庫
-
安裝最新版本的 Prisma Client
-
安裝 libSQL 資料庫用戶端和 Prisma Client 的驅動程式適配器
-
使用以下程式碼片段更新您的 Prisma Client 實例
就這樣!
您現在可以使用 Prisma Client 開始查詢您的 Turso 資料庫。
如果您複製了 typescript/script
範例,您可以執行 npm run dev
來插入和查詢資料,以確認您的變更已成功。
接下來的步驟
上面的設定使用 單個 遠端資料庫。您可以通過 設定資料庫複本 來更進一步。當您建立複本時,Turso 會自動為您的應用程式選擇最近的複本來進行讀取查詢。不需要額外的邏輯來定義應如何處理讀取查詢的路由。寫入查詢將轉發到主資料庫。
試用一下並分享您的回饋!如果您發現缺少某些內容或遇到錯誤,我們鼓勵您建立 issue。
超越遠端 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 電子報