SQLSync
SQLSync是一个协作式离线优先的SQLite封装,旨在同步用户、设备和边缘之间的Web应用程序状态。
示例用例
- 具有结构化文件导向数据模型的Web应用,如Figma。每个文件可以是一个SQLSync数据库,实现实时本地优先协作和存在感
- 在边缘运行SQLSync,能够高度容忍不稳定的网络条件
- 在SQLite只读副本上启用乐观突变
SQLSync演示
了解SQLSync行为的最佳方式是体验待办事项列表演示。点击此链接将创建一个唯一的待办事项列表并重定向到其唯一URL。然后,您可以与朋友分享该URL或在多个设备(或浏览器)上打开它,以体验离线优先协作SQLite的强大功能。
您还可以通过观看Carl在WasmCon 2023上的演讲了解更多关于SQLSync及其目标的信息。录像可在此处找到。
特性
- 最终一致性SQLite
- 乐观读写
- 响应式查询订阅
- 实时协作
- 离线优先
- 跨标签页同步
- React库
如果您有兴趣使用或贡献SQLSync,请加入Discord社区并告诉我们您想要构建什么。我们很高兴与您合作!
安装 & 入门
请参考指南了解如何将SQLSync添加到您的应用程序中。
提示 & 技巧
如何在浏览器中调试SQLSync
默认情况下,SQLSync在共享Web Worker中运行。这允许数据库自动在不同标签页之间共享,但也使得SQLSync的调试变得稍微困难。
最简单的方法是使用Google Chrome,并访问特殊URL:chrome://inspect/#workers。在该页面上,您会看到其他标签页中运行的所有共享Worker列表。假设另一个标签页正在运行SQLSync,您会看到列出的共享Worker。点击"inspect"以打开该Worker的开发者工具。
我的表格缺失或多个语句未执行
SQLSync底层使用rusqlite来运行和查询SQLite。不幸的是,execute
方法只支持单个语句,并且会静默忽略尾随语句。因此,如果您在reducer中使用execute!(...)
,请确保每次调用只运行一个SQL语句。
例如:
// 不要这样做:
execute!("create table foo (id int); create table bar (id int);").await?;
// 应该这样做:
execute!("create table foo (id int)").await?;
execute!("create table bar (id int)").await?;
社区 & 贡献
如果您有兴趣为SQLSync做出贡献,请加入Discord社区并告诉我们您想要构建什么。所有贡献都将被要求达到高标准,并且如果与现有任务相关并符合商定的规范,更有可能被接受。