@ base目的/rxdb-sqlite
一个自由、开源、跨平台的 SQLite 存储适配器 RxDB 函数
寻找官方,生产优化的SQLite存储器? 见 RxDB 高精度 SQLite。 。 。 .
这是一个 社区建设 列入
@basepurpose。 。 。 .
为什么这个存在
RxDB 函数 是JavaScript应用程序的优秀本地第一,离线能力数据库. 其生产准备的SQLite存储需要付费的溢价许可证,这可能成为独行开发者,创业者,开源项目,学生,以及非营利者的障碍.
该项目提供 免费,麻省理工学院许可 SQLite存储适配器在多个平台之间工作.
平台支持
| 平台 | SQLite 执行 | 测试状态 |
|---|---|---|
| 原生反应( Android) | expo- sqlite 语句 | 在设备上验证 |
| 原生反应( iOS) | expo- sqlite 语句 | 测试通过、需要设备核查 |
| 浏览器 | @sqlite.org/sqlite-wasm + OPFS | 测试通过、需要设备核查 |
| 节点.js | 较好的sqlite3 | 测试通过、需要设备核查 |
| 阿宝 | bun: sqlite (本地语) | 测试通过、需要设备核查 |
| 电子 | 较好的sqlite3 | 测试通过、需要设备核查 |
| 电容(iOS/Android) | @ mictor- community/ sqlite | 测试通过、需要设备核查 |
| Tauri (温道/macOS/Linux) | @tauri-apps/plugin-sql (中文(简体) ) | 测试通过、需要设备核查 |
671个测试通过28个测试套房. 目前为止,只有Android上的React Industrial已经通过真实设备验证. 欢迎社区帮助测试其他平台 请 打开一个问题 你的结果.
安装
npm install @basepurpose/rxdb-sqlite
平台特定依赖
| 平台 | 额外安装 |
|---|---|
| 浏览器 | 无(WASM捆绑) |
| 节点.js | npm install better-sqlite3 |
| 阿宝 | 无( 本地 SQLite) |
| 原生反应 | npx expo install expo-sqlite |
| 电子 | npm install better-sqlite3 |
| 电容 | npm install @capacitor-community/sqlite && npx cap sync |
| 陶里语Name | 添加 tauri-plugin-sql 改为 Cargo.toml |
快速启动
import { createRxDatabase } from 'rxdb';
import { getRxStorageSQLite } from '@basepurpose/rxdb-sqlite';
const db = await createRxDatabase({
name: 'mydb',
storage: getRxStorageSQLite()
});
await db.addCollections({
users: {
schema: {
version: 0,
primaryKey: 'id',
type: 'object',
properties: {
id: { type: 'string', maxLength: 100 },
name: { type: 'string' },
email: { type: 'string' }
},
required: ['id', 'name']
}
}
});
await db.users.insert({ id: 'user-1', name: 'Alice', email: '[email protected]' });
平台特定导入
// Browser (WASM + OPFS)
import { getRxStorageSQLite } from '@basepurpose/rxdb-sqlite/browser';
// Node.js
import { getRxStorageSQLite } from '@basepurpose/rxdb-sqlite/node';
// Bun
import { getRxStorageSQLite } from '@basepurpose/rxdb-sqlite/bun';
// React Native (Expo)
import { getRxStorageSQLite } from '@basepurpose/rxdb-sqlite/react-native';
// Electron
import { getRxStorageSQLite } from '@basepurpose/rxdb-sqlite/electron';
// Capacitor (iOS/Android)
import { getRxStorageSQLite } from '@basepurpose/rxdb-sqlite/capacitor';
// Tauri (Desktop)
import { getRxStorageSQLite } from '@basepurpose/rxdb-sqlite/tauri';
特征
芒果查询支持
所有标准 RxDB 查询操作员的工作 :
const results = await db.users.find({
selector: {
$and: [
{ age: { $gte: 18 } },
{ status: { $in: ['active', 'pending'] } },
{ 'address.country': 'US' }
]
},
sort: [{ name: 'asc' }],
limit: 10
}).exec();
支持的运算符 : $eq, (中文(简体) ), $ne, (中文(简体) ), $gt, (中文(简体) ), $gte, (中文(简体) ), $lt, (中文(简体) ), $lte, (中文(简体) ), $in, (中文(简体) ), $nin, (中文(简体) ), $exists, (中文(简体) ), $type, (中文(简体) ), $and, (中文(简体) ), $or, (中文(简体) ), $not, (中文(简体) ), $nor, (中文(简体) ), $elemMatch, (中文(简体) ), $size, (中文(简体) ), $all, (中文(简体) ), $regex, (中文(简体) ), $text
反应查询
db.users.find().$.subscribe(users => {
console.log('Users updated:', users);
});
附录
将二进制数据与文档并存 :
const doc = await db.posts.findOne('post-1').exec();
await doc.putAttachment({
id: 'image.jpg',
data: imageBase64String,
type: 'image/jpeg'
});
全文搜索( FTS5)
const schema = {
// ... your schema
fulltext: {
fields: ['title', 'content'],
tokenizer: 'unicode61' // 'unicode61' | 'porter' | 'ascii' | 'trigram'
}
};
const results = await db.articles.find({
selector: { $text: 'javascript tutorial' }
}).exec();
索引顾问
分析查询并获取索引建议:
import { analyzeQuery, suggestIndexes } from '@basepurpose/rxdb-sqlite';
const suggestions = suggestIndexes(
{ selector: { status: 'active', age: { $gte: 18 } } },
'users'
);
复制
与所有 RxDB 复制插件( CouchDB, Supabase, GraphQL等) 一起工作 :
import { replicateCouchDB } from 'rxdb/plugins/replication-couchdb';
const replication = replicateCouchDB({
collection: db.users,
url: 'https://your-couchdb.example.com/users',
live: true,
pull: {},
push: {}
});
多标签支持( 浏览器)
通过 BroadcastChannel 自动同步到其他标签的更改 .
RxDB 插件兼容性
与CRDT,加密,复制,备份,和迁移插件一起工作.
配置
getRxStorageSQLite({
debug: true,
pragma: {
journal_mode: 'WAL',
synchronous: 'NORMAL',
cache_size: -64000, // 64MB cache
temp_store: 'MEMORY'
}
});
API 参考
getRxStorageSQLite(options?)
创建 RxStorage 实例。 平台是自动检测的,或者使用特定平台的导入.
| 选项 | 类型 | 说明 |
|---|---|---|
debug | boolean | 启用调试记录( 默认 ): false(中文(简体) ) |
adapter | SQLiteAdapterFactory | 自定义适配器厂 |
pragma | SQLitePragmaSettings | SQLite PRAGMA 设置 |
browser | BrowserAdapterOptions | 浏览器特定选项 |
capacitor | CapacitorAdapterOptions | 特定电容选项 |
tauri | TauriAdapterOptions | Tauri特定选项 |
node | NodeAdapterOptions | 节点.js 特定选项 |
bun | BunAdapterOptions | Bun 特定选项 |
reactNative | ReactNativeAdapterOptions | 对应本地特定选项 |
electron | ElectronAdapterOptions | 电子专用选项 |
工具函数
import {
closeAllSQLiteConnections,
isDatabaseOpen,
translateMangoToSQL,
buildSelectQuery,
buildCountQuery,
} from '@basepurpose/rxdb-sqlite';
浏览器要求
为了达到最佳性能,请使用这些信头,以启用共享箭头:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
如果这些信头不可用,存储会回到更慢的模式.
错误代码
| 代码 | 说明 |
|---|---|
SQLITE_STORAGE_CLOSED | 关闭实例操作 |
SQLITE_ATTACHMENT_NOT_FOUND | 并不存在附件 |
SQLITE_DIGEST_MISMATCH | 附件摘要校验失败 |
SQLITE_INVALID_DOCUMENT_ID | 无效的文档 ID |
MANGO_QUERY_ERROR | 无效的查询运算符或语法 |
捐款
欢迎捐款。 见 捐款额 准则.
git clone https://github.com/basepurpose/rxdb-sqlite.git
cd rxdb-sqlite
bun install
bun test
bun run build
许可证
麻省理工学院 -- -- 见 自由主义。 。 。 .
承认
- RxDB 函数 - 数据库中的存储权限
- @sqlite.org/sqlite-wasm (英语) - 官方 SQLite WASM 构建
- @ mictor- community/ sqlite -- 电容 SQLite 插件
- @tauri-apps/plugin-sql (中文(简体) ) -- Tauri SQL 插件
由新建
基准用途 ——造型实验室建设开源工具.