[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$fEr5vigYxqTOfp3PzlJhe7QlR97tYpdlkFmLX4LvYIOI":3},{"item":4,"related":43},{"id":5,"type":6,"title":7,"slug":8,"summary":9,"body":10,"coverUrl":11,"productScreenshots":12,"productLinks":13,"authorName":14,"authorUrl":15,"authorSubject":16,"category":17,"tags":22,"sourceLabel":35,"sourceName":35,"sourceUrl":35,"status":36,"seoTitle":35,"seoDescription":35,"canonicalUrl":35,"isFeatured":37,"sno":38,"sortOrder":39,"publishedAt":40,"updatedAt":41,"createdAt":42},"ea23e2ef-cc1b-4977-ad38-bf95b363c953","article","SQLite复兴：从一个文件到边缘数据库","sqlite-libsql-turso-edge-database","SQLite 是没有服务器、就是一个文件的嵌入式数据库，零运维、极低延迟。借助 libSQL \u002F Turso，它正走向「边缘 + 多副本」，让读多写少的应用全球低延迟。","提到数据库，很多人第一反应是「要单独部署一台服务器、要连接、要运维」。但有一类数据库反其道而行——它没有服务器，就是一个文件。它就是 SQLite。你手机里的 App、浏览器、甚至飞机的黑匣子都在用它。\n\n而到 2026 年，借助 libSQL \u002F Turso 这样的项目，SQLite 正从「本地小工具」走向「边缘数据库」。\n\n## 背景：SQLite 到底特别在哪\n\n先说清概念。绝大多数数据库（MySQL、Postgres）是「客户端-服务器」模式：数据库是一个独立进程，你的程序通过网络连接去访问它。SQLite 不一样，它是**嵌入式**的——整个数据库就是磁盘上的一个文件，你的程序直接把它当函数库调用，没有网络、没有单独的服务器进程。\n\n这带来两个好处：**零运维**（不用部署和维护数据库服务器）和**极低延迟**（读写就是本地文件操作，没有网络往返）。代价是它传统上更适合单机、读多写少的场景。\n\n## libSQL 与 Turso：把 SQLite 搬到边缘\n\nSQLite 的短板是「天生单机」。libSQL 是 SQLite 的一个开源分支，Turso 则在它之上提供托管服务，核心思路是：把 SQLite 的「简单」保留下来，同时解决「多地访问」和「可扩展」的问题。\n\n它的杀手锏是「边缘 + 多副本」：把数据库的副本放到全球各地靠近用户的节点，用户读数据时就近读本地副本，延迟极低。这对「读多写少」的应用（内容站、配置、用户资料）特别合适。此外还流行一种「按租户一库」的模式——给每个客户开一个独立的 SQLite 数据库，天然隔离，非常适合多租户 SaaS。\n\n```mermaid\nflowchart TD\n    A[用户请求] --> B{读还是写?}\n    B -->|读| C[就近读边缘副本\u003Cbr\u002F>低延迟]\n    B -->|写| D[写主库]\n    D --> E[异步同步到各边缘副本]\n    E --> C\n```\n\n## 一个最小可运行的例子\n\n在本地，SQLite 用起来就是「打开一个文件」：\n\n```python\nimport sqlite3\ncon = sqlite3.connect(\"app.db\")   # 就是一个文件，没有服务器\ncon.execute(\"CREATE TABLE IF NOT EXISTS note(id INTEGER PRIMARY KEY, text TEXT)\")\ncon.execute(\"INSERT INTO note(text) VALUES (?)\", (\"你好，SQLite\",))\ncon.commit()\nfor row in con.execute(\"SELECT * FROM note\"):\n    print(row)\n```\n\n换成 Turso（libSQL），代码几乎一样，只是把「本地文件」换成「远程边缘数据库的地址 + 令牌」：\n\n```javascript\nimport { createClient } from \"@libsql\u002Fclient\";\n\nconst db = createClient({\n  url: \"libsql:\u002F\u002Fyour-db.turso.io\",   \u002F\u002F 边缘数据库地址\n  authToken: process.env.TURSO_TOKEN, \u002F\u002F 令牌从环境变量读取，切勿写死\n});\n\nawait db.execute(\"SELECT * FROM note\");\n```\n\n注意：令牌等凭证要放环境变量，别硬编码进代码或提交到仓库。\n\n## 取舍与边界\n\n- **写扩展有限**：SQLite\u002FlibSQL 的强项是读，高并发写入不是它的主场——需要海量并发写，仍应考虑 Postgres 等。\n- **同步一致性**：多副本是「最终一致」，写完的数据同步到各边缘节点需要一点时间，强一致场景要留意。\n- **单库体量**：单个 SQLite 文件适合中小体量数据；超大数据集或复杂分析型查询，专用数据库更合适。\n- **它不是万能替代**：把它用在「读多写少、要低延迟、要零运维」的场景，才最能发挥价值。\n\n## 你能马上用起来的收获清单\n\n- 原型、桌面端、移动端、CLI 工具，优先考虑 SQLite——零部署，一个文件搞定。\n- 读多写少、要全球低延迟的 Web 应用，评估 Turso\u002FlibSQL 的边缘副本方案。\n- 多租户 SaaS 可以试试「一租户一库」，天然隔离、备份和迁移都简单。\n- 凭证（authToken）一律走环境变量，别写进代码或提交仓库。\n- 记住它的适用边界：读多写少 + 低延迟 + 零运维时最香，高并发写要另选。","https:\u002F\u002Foxqtewbrpuiouqqjrvdv.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fpublic-media\u002F2026-07-19\u002F611d83bb-2a21-4271-a183-155a89a5bb81.jpg",[],[],"Foundit AI","https:\u002F\u002Ffoundit.cn","f39339b1-aaa6-4e86-b0c2-a6e6a21113b5",{"id":18,"name":19,"slug":20,"description":21},"6179d3b6-dc34-4483-9ded-3cd9f1b37a47","科普","abbreviation","介绍各领域新兴概念",[23,27,31],{"id":24,"name":25,"slug":26},"7c76bfc2-f80f-4ee0-a95d-27bd8708b434","技术","slug",{"id":28,"name":29,"slug":30},"a202d639-99a6-488a-a712-4d4c6ffd7e15","开发","dev",{"id":32,"name":33,"slug":34},"144abe77-0dc6-4f66-a176-20bddb1c0bfa","编程","coding",null,"published",false,70,0,"2026-07-17T00:00:00.000Z","2026-07-19T17:47:27.408Z","2026-07-19T17:10:52.499Z",[44,54,62],{"id":45,"type":6,"title":46,"slug":47,"summary":48,"coverUrl":49,"authorName":50,"sno":51,"publishedAt":52,"createdAt":53},"153fb92b-ccb1-4311-ad7c-d93b36ea2203","WebAssembly Component Model：不同语言写的模块如何拼在一起？","webassembly-component-model-wasi-explained","WebAssembly 不只是一个能运行的二进制文件。Component Model 通过接口、类型和能力权限，让不同语言编写的组件能够组合。本文从 WIT、WASI 0.2 和宿主运行时讲清组件模型的价值、权限边界与适用场景。","\u002Fuploads\u002F2026-09-08\u002Fb44135d7-7561-477f-9edc-c52fd17b99f4.jpg","Foundit",51,"2026-09-08T00:00:00.000Z","2026-09-08T03:19:21.154Z",{"id":55,"type":6,"title":56,"slug":57,"summary":58,"coverUrl":59,"authorName":14,"sno":60,"publishedAt":40,"createdAt":61},"974096b9-8c0e-431e-bab6-8cd58e2af97f","Passkey通行密钥：为什么用指纹登录比密码更安全","passkeys-webauthn-passwordless-login","Passkey 基于 WebAuthn\u002FFIDO，用非对称加密让私钥不出设备、并与域名绑定，从原理上防钓鱼。","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1614064641938-3bbee52942c7?w=1200",71,"2026-07-19T17:10:50.027Z",{"id":63,"type":6,"title":64,"slug":65,"summary":66,"coverUrl":67,"authorName":50,"sno":68,"publishedAt":69,"createdAt":70},"54d83c94-d588-400d-9d13-42daa20331e2","CAS：文件的身份可以由内容决定","content-addressable-storage-ai-coding","内容寻址存储 CAS 用内容摘要识别文件和构建产物，解释 AI 编程工具、容器和缓存为什么能复用结果。","\u002Fuploads\u002F2026-09-14\u002F3fab23b3-8bcd-4a3b-bf5a-2ab895ce3a10.jpg",41,"2026-09-14T00:00:00.000Z","2026-09-14T15:01:41.114Z"]