@quereus/plugin-leveldb 4.23.0 → 4.24.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +321 -320
- package/dist/src/provider.d.ts +2 -1
- package/dist/src/provider.d.ts.map +1 -1
- package/dist/src/provider.js +17 -15
- package/dist/src/provider.js.map +1 -1
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -1,320 +1,321 @@
|
|
|
1
|
-
# @quereus/plugin-leveldb
|
|
2
|
-
|
|
3
|
-
> **Stability: Beta** — complete and tested, but the surface is still being shaped; a
|
|
4
|
-
> breaking change may land in a minor release. It rides `@quereus/store`'s on-disk key
|
|
5
|
-
> encoding, which is not frozen. See [Stability Tiers](../../docs/stability.md#tiers).
|
|
6
|
-
|
|
7
|
-
LevelDB storage plugin for Quereus. Provides persistent storage for Node.js environments using the [`@quereus/store`](../quereus-store/) module.
|
|
8
|
-
|
|
9
|
-
## Features
|
|
10
|
-
|
|
11
|
-
- **Fast**: LevelDB offers excellent read/write performance for key-value workloads
|
|
12
|
-
- **Transaction isolation**: Read-committed + read-your-own-writes by default (no write-write conflict detection; not snapshot isolation)
|
|
13
|
-
- **Sorted keys**: Efficient range queries with ordered iteration
|
|
14
|
-
- **Crash-safe commits**: A whole transaction's data + secondary-index writes commit in one atomic, durable LevelDB batch (see [Storage layout](#storage-layout))
|
|
15
|
-
- **Compression**: Built-in Snappy compression for reduced disk usage
|
|
16
|
-
|
|
17
|
-
## Storage layout
|
|
18
|
-
|
|
19
|
-
All of a database's stores live inside **one physical LevelDB** at `basePath`,
|
|
20
|
-
each as a [sublevel](https://github.com/Level/abstract-level#sublevel) keyed by
|
|
21
|
-
its store name:
|
|
22
|
-
|
|
23
|
-
| Logical store | Sublevel name |
|
|
24
|
-
|---|---|
|
|
25
|
-
| Table data | `{schema}.{table}` |
|
|
26
|
-
| Secondary index | `{schema}.{table}_idx_{name}` |
|
|
27
|
-
| Unified stats | `__stats__` |
|
|
28
|
-
| Catalog (DDL) | `__catalog__` |
|
|
29
|
-
|
|
30
|
-
Because every sublevel shares one physical store, a single chained batch commits
|
|
31
|
-
across all of a table's sublevels (data + every secondary index) **atomically and
|
|
32
|
-
durably** — closing the crash window where a per-store commit loop could leave a
|
|
33
|
-
table's rows and its indexes divergent on disk. By default each commit is
|
|
34
|
-
`fsync`'d so it survives power loss; see [`syncCommits`](#plugin-settings).
|
|
35
|
-
|
|
36
|
-
> **Hard cutover (no on-disk migration).** This shared-root layout is the only
|
|
37
|
-
> LevelDB layout. Databases written by the older per-directory layout
|
|
38
|
-
> (`{basePath}/{schema}/{table}`, a separate LevelDB per table) are **not** read
|
|
39
|
-
> by this version and must be re-created. Pre-1.0 dev data is expected to be
|
|
40
|
-
> thrown away; there is no migration importer.
|
|
41
|
-
|
|
42
|
-
## Installation
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
npm install @quereus/plugin-leveldb @quereus/store @quereus/isolation
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
## Quick Start
|
|
49
|
-
|
|
50
|
-
### With registerPlugin (Recommended)
|
|
51
|
-
|
|
52
|
-
```typescript
|
|
53
|
-
import { Database, registerPlugin } from '@quereus/quereus';
|
|
54
|
-
import leveldbPlugin from '@quereus/plugin-leveldb/plugin';
|
|
55
|
-
|
|
56
|
-
const db = new Database();
|
|
57
|
-
await registerPlugin(db, leveldbPlugin, { basePath: './data' });
|
|
58
|
-
|
|
59
|
-
await db.exec(`
|
|
60
|
-
create table users (id integer primary key, name text)
|
|
61
|
-
using store
|
|
62
|
-
`);
|
|
63
|
-
|
|
64
|
-
// Full transaction isolation enabled by default
|
|
65
|
-
await db.exec('BEGIN');
|
|
66
|
-
await db.exec(`INSERT INTO users VALUES (1, 'Alice')`);
|
|
67
|
-
const user = await db.get('SELECT * FROM users WHERE id = 1'); // Sees uncommitted insert
|
|
68
|
-
await db.exec('COMMIT');
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Disabling Isolation
|
|
72
|
-
|
|
73
|
-
If you need maximum performance and don't require read-your-own-writes within transactions:
|
|
74
|
-
|
|
75
|
-
```typescript
|
|
76
|
-
await registerPlugin(db, leveldbPlugin, {
|
|
77
|
-
basePath: './data',
|
|
78
|
-
isolation: false // Disable isolation layer
|
|
79
|
-
});
|
|
80
|
-
```
|
|
81
|
-
|
|
82
|
-
### Direct Usage with Provider
|
|
83
|
-
|
|
84
|
-
```typescript
|
|
85
|
-
import { Database } from '@quereus/quereus';
|
|
86
|
-
import { createLevelDBProvider } from '@quereus/plugin-leveldb';
|
|
87
|
-
import { createIsolatedStoreModule } from '@quereus/store';
|
|
88
|
-
|
|
89
|
-
const db = new Database();
|
|
90
|
-
const provider = createLevelDBProvider({ basePath: './data' });
|
|
91
|
-
|
|
92
|
-
// With isolation (recommended)
|
|
93
|
-
const storeModule = createIsolatedStoreModule({ provider });
|
|
94
|
-
db.registerModule('store', storeModule);
|
|
95
|
-
|
|
96
|
-
await db.exec(`
|
|
97
|
-
create table users (id integer primary key, name text)
|
|
98
|
-
using store
|
|
99
|
-
`);
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
## API
|
|
103
|
-
|
|
104
|
-
### LevelDBStore
|
|
105
|
-
|
|
106
|
-
Low-level KVStore implementation. `LevelDBStore.open()` opens a **standalone**
|
|
107
|
-
single physical LevelDB database — useful for one-off key-value stores (e.g. sync
|
|
108
|
-
metadata). The multi-table StoreModule backend does not use this directly; it
|
|
109
|
-
opens one shared root and hands out sublevel-backed stores via `LevelDBProvider`.
|
|
110
|
-
|
|
111
|
-
```typescript
|
|
112
|
-
import { LevelDBStore } from '@quereus/plugin-leveldb';
|
|
113
|
-
|
|
114
|
-
const store = await LevelDBStore.open({ path: './data/mystore' });
|
|
115
|
-
|
|
116
|
-
await store.put(key, value);
|
|
117
|
-
const data = await store.get(key);
|
|
118
|
-
await store.delete(key);
|
|
119
|
-
|
|
120
|
-
// Range iteration
|
|
121
|
-
for await (const { key, value } of store.iterate({ gte: startKey, lt: endKey })) {
|
|
122
|
-
console.log(key, value);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
// Batch writes
|
|
126
|
-
const batch = store.batch();
|
|
127
|
-
batch.put(key1, value1);
|
|
128
|
-
batch.put(key2, value2);
|
|
129
|
-
batch.delete(key3);
|
|
130
|
-
await batch.write();
|
|
131
|
-
|
|
132
|
-
await store.close();
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
### LevelDBProvider
|
|
136
|
-
|
|
137
|
-
Factory for managing multiple stores:
|
|
138
|
-
|
|
139
|
-
```typescript
|
|
140
|
-
import { createLevelDBProvider } from '@quereus/plugin-leveldb';
|
|
141
|
-
|
|
142
|
-
const provider = createLevelDBProvider({ basePath: './data' });
|
|
143
|
-
|
|
144
|
-
// All stores are sublevels of the single LevelDB at ./data
|
|
145
|
-
const userStore = await provider.getStore('main', 'users'); // sublevel main.users
|
|
146
|
-
const catalogStore = await provider.getCatalogStore(); // sublevel __catalog__
|
|
147
|
-
|
|
148
|
-
await provider.closeStore('main', 'users'); // drops the sublevel handle
|
|
149
|
-
await provider.closeAll(); // closes the shared root
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
## Configuration
|
|
153
|
-
|
|
154
|
-
### Plugin Settings
|
|
155
|
-
|
|
156
|
-
| Setting | Type | Default | Description |
|
|
157
|
-
|---------|------|---------|-------------|
|
|
158
|
-
| `basePath` | string | `'./data'` | Directory of the single shared LevelDB database |
|
|
159
|
-
| `createIfMissing` | boolean | `true` | Create the database if it doesn't exist |
|
|
160
|
-
| `syncCommits` | boolean | `true` | `fsync` each transaction commit so it survives power loss (slower commits when on) |
|
|
161
|
-
| `moduleName` | string | `'store'` | Name to register the virtual table module under |
|
|
162
|
-
| `isolation` | boolean | `true` | Wrap with the isolation layer (read-committed + read-your-own-writes; no write-write conflict detection, not snapshot isolation) |
|
|
163
|
-
|
|
164
|
-
### LevelDBStore Options (standalone `open`)
|
|
165
|
-
|
|
166
|
-
| Option | Type | Default | Description |
|
|
167
|
-
|--------|------|---------|-------------|
|
|
168
|
-
| `path` | string | required | Directory path for the database |
|
|
169
|
-
| `createIfMissing` | boolean | `true` | Create database if it doesn't exist |
|
|
170
|
-
|
|
171
|
-
## Example with Transactions
|
|
172
|
-
|
|
173
|
-
```typescript
|
|
174
|
-
import { Database, registerPlugin } from '@quereus/quereus';
|
|
175
|
-
import leveldbPlugin from '@quereus/plugin-leveldb/plugin';
|
|
176
|
-
|
|
177
|
-
const db = new Database();
|
|
178
|
-
await registerPlugin(db, leveldbPlugin, { basePath: './data' });
|
|
179
|
-
|
|
180
|
-
await db.exec(`create table accounts (id integer primary key, balance real) using store`);
|
|
181
|
-
|
|
182
|
-
await db.exec('begin');
|
|
183
|
-
try {
|
|
184
|
-
await db.exec(`update accounts set balance = balance - 100 where id = 1`);
|
|
185
|
-
await db.exec(`update accounts set balance = balance + 100 where id = 2`);
|
|
186
|
-
await db.exec('commit');
|
|
187
|
-
} catch (e) {
|
|
188
|
-
await db.exec('rollback');
|
|
189
|
-
throw e;
|
|
190
|
-
}
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
## Measured read cost (and why no cost
|
|
194
|
-
|
|
195
|
-
A storage backend can tell the query planner what its basic reads cost, relative to
|
|
196
|
-
reading one row sequentially during a full scan (1.0 by definition). The two knobs live in
|
|
197
|
-
[`@quereus/store`'s `cost-profile.ts`](../quereus-store/src/common/cost-profile.ts):
|
|
198
|
-
`pointRead` (resolving one secondary-index entry to its row, batched) and `seekPositioning`
|
|
199
|
-
(the per-key cost of a multi-key seek). IndexedDB declares measured values; **LevelDB
|
|
200
|
-
declares
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
`
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
|
214
|
-
|
|
|
215
|
-
|
|
|
216
|
-
| | 1 000 random
|
|
217
|
-
|
|
|
218
|
-
|
|
|
219
|
-
| | 1 000 random
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
|
231
|
-
|
|
|
232
|
-
|
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
page
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
|
289
|
-
|
|
|
290
|
-
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
- [`@quereus/
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
1
|
+
# @quereus/plugin-leveldb
|
|
2
|
+
|
|
3
|
+
> **Stability: Beta** — complete and tested, but the surface is still being shaped; a
|
|
4
|
+
> breaking change may land in a minor release. It rides `@quereus/store`'s on-disk key
|
|
5
|
+
> encoding, which is not frozen. See [Stability Tiers](../../docs/stability.md#tiers).
|
|
6
|
+
|
|
7
|
+
LevelDB storage plugin for Quereus. Provides persistent storage for Node.js environments using the [`@quereus/store`](../quereus-store/) module.
|
|
8
|
+
|
|
9
|
+
## Features
|
|
10
|
+
|
|
11
|
+
- **Fast**: LevelDB offers excellent read/write performance for key-value workloads
|
|
12
|
+
- **Transaction isolation**: Read-committed + read-your-own-writes by default (no write-write conflict detection; not snapshot isolation)
|
|
13
|
+
- **Sorted keys**: Efficient range queries with ordered iteration
|
|
14
|
+
- **Crash-safe commits**: A whole transaction's data + secondary-index writes commit in one atomic, durable LevelDB batch (see [Storage layout](#storage-layout))
|
|
15
|
+
- **Compression**: Built-in Snappy compression for reduced disk usage
|
|
16
|
+
|
|
17
|
+
## Storage layout
|
|
18
|
+
|
|
19
|
+
All of a database's stores live inside **one physical LevelDB** at `basePath`,
|
|
20
|
+
each as a [sublevel](https://github.com/Level/abstract-level#sublevel) keyed by
|
|
21
|
+
its store name:
|
|
22
|
+
|
|
23
|
+
| Logical store | Sublevel name |
|
|
24
|
+
|---|---|
|
|
25
|
+
| Table data | `{schema}.{table}` |
|
|
26
|
+
| Secondary index | `{schema}.{table}_idx_{name}` |
|
|
27
|
+
| Unified stats | `__stats__` |
|
|
28
|
+
| Catalog (DDL) | `__catalog__` |
|
|
29
|
+
|
|
30
|
+
Because every sublevel shares one physical store, a single chained batch commits
|
|
31
|
+
across all of a table's sublevels (data + every secondary index) **atomically and
|
|
32
|
+
durably** — closing the crash window where a per-store commit loop could leave a
|
|
33
|
+
table's rows and its indexes divergent on disk. By default each commit is
|
|
34
|
+
`fsync`'d so it survives power loss; see [`syncCommits`](#plugin-settings).
|
|
35
|
+
|
|
36
|
+
> **Hard cutover (no on-disk migration).** This shared-root layout is the only
|
|
37
|
+
> LevelDB layout. Databases written by the older per-directory layout
|
|
38
|
+
> (`{basePath}/{schema}/{table}`, a separate LevelDB per table) are **not** read
|
|
39
|
+
> by this version and must be re-created. Pre-1.0 dev data is expected to be
|
|
40
|
+
> thrown away; there is no migration importer.
|
|
41
|
+
|
|
42
|
+
## Installation
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
npm install @quereus/plugin-leveldb @quereus/store @quereus/isolation
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
## Quick Start
|
|
49
|
+
|
|
50
|
+
### With registerPlugin (Recommended)
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
import { Database, registerPlugin } from '@quereus/quereus';
|
|
54
|
+
import leveldbPlugin from '@quereus/plugin-leveldb/plugin';
|
|
55
|
+
|
|
56
|
+
const db = new Database();
|
|
57
|
+
await registerPlugin(db, leveldbPlugin, { basePath: './data' });
|
|
58
|
+
|
|
59
|
+
await db.exec(`
|
|
60
|
+
create table users (id integer primary key, name text)
|
|
61
|
+
using store
|
|
62
|
+
`);
|
|
63
|
+
|
|
64
|
+
// Full transaction isolation enabled by default
|
|
65
|
+
await db.exec('BEGIN');
|
|
66
|
+
await db.exec(`INSERT INTO users VALUES (1, 'Alice')`);
|
|
67
|
+
const user = await db.get('SELECT * FROM users WHERE id = 1'); // Sees uncommitted insert
|
|
68
|
+
await db.exec('COMMIT');
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Disabling Isolation
|
|
72
|
+
|
|
73
|
+
If you need maximum performance and don't require read-your-own-writes within transactions:
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
await registerPlugin(db, leveldbPlugin, {
|
|
77
|
+
basePath: './data',
|
|
78
|
+
isolation: false // Disable isolation layer
|
|
79
|
+
});
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Direct Usage with Provider
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
import { Database } from '@quereus/quereus';
|
|
86
|
+
import { createLevelDBProvider } from '@quereus/plugin-leveldb';
|
|
87
|
+
import { createIsolatedStoreModule } from '@quereus/store';
|
|
88
|
+
|
|
89
|
+
const db = new Database();
|
|
90
|
+
const provider = createLevelDBProvider({ basePath: './data' });
|
|
91
|
+
|
|
92
|
+
// With isolation (recommended)
|
|
93
|
+
const storeModule = createIsolatedStoreModule({ provider });
|
|
94
|
+
db.registerModule('store', storeModule);
|
|
95
|
+
|
|
96
|
+
await db.exec(`
|
|
97
|
+
create table users (id integer primary key, name text)
|
|
98
|
+
using store
|
|
99
|
+
`);
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## API
|
|
103
|
+
|
|
104
|
+
### LevelDBStore
|
|
105
|
+
|
|
106
|
+
Low-level KVStore implementation. `LevelDBStore.open()` opens a **standalone**
|
|
107
|
+
single physical LevelDB database — useful for one-off key-value stores (e.g. sync
|
|
108
|
+
metadata). The multi-table StoreModule backend does not use this directly; it
|
|
109
|
+
opens one shared root and hands out sublevel-backed stores via `LevelDBProvider`.
|
|
110
|
+
|
|
111
|
+
```typescript
|
|
112
|
+
import { LevelDBStore } from '@quereus/plugin-leveldb';
|
|
113
|
+
|
|
114
|
+
const store = await LevelDBStore.open({ path: './data/mystore' });
|
|
115
|
+
|
|
116
|
+
await store.put(key, value);
|
|
117
|
+
const data = await store.get(key);
|
|
118
|
+
await store.delete(key);
|
|
119
|
+
|
|
120
|
+
// Range iteration
|
|
121
|
+
for await (const { key, value } of store.iterate({ gte: startKey, lt: endKey })) {
|
|
122
|
+
console.log(key, value);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Batch writes
|
|
126
|
+
const batch = store.batch();
|
|
127
|
+
batch.put(key1, value1);
|
|
128
|
+
batch.put(key2, value2);
|
|
129
|
+
batch.delete(key3);
|
|
130
|
+
await batch.write();
|
|
131
|
+
|
|
132
|
+
await store.close();
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### LevelDBProvider
|
|
136
|
+
|
|
137
|
+
Factory for managing multiple stores:
|
|
138
|
+
|
|
139
|
+
```typescript
|
|
140
|
+
import { createLevelDBProvider } from '@quereus/plugin-leveldb';
|
|
141
|
+
|
|
142
|
+
const provider = createLevelDBProvider({ basePath: './data' });
|
|
143
|
+
|
|
144
|
+
// All stores are sublevels of the single LevelDB at ./data
|
|
145
|
+
const userStore = await provider.getStore('main', 'users'); // sublevel main.users
|
|
146
|
+
const catalogStore = await provider.getCatalogStore(); // sublevel __catalog__
|
|
147
|
+
|
|
148
|
+
await provider.closeStore('main', 'users'); // drops the sublevel handle
|
|
149
|
+
await provider.closeAll(); // closes the shared root
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
## Configuration
|
|
153
|
+
|
|
154
|
+
### Plugin Settings
|
|
155
|
+
|
|
156
|
+
| Setting | Type | Default | Description |
|
|
157
|
+
|---------|------|---------|-------------|
|
|
158
|
+
| `basePath` | string | `'./data'` | Directory of the single shared LevelDB database |
|
|
159
|
+
| `createIfMissing` | boolean | `true` | Create the database if it doesn't exist |
|
|
160
|
+
| `syncCommits` | boolean | `true` | `fsync` each transaction commit so it survives power loss (slower commits when on) |
|
|
161
|
+
| `moduleName` | string | `'store'` | Name to register the virtual table module under |
|
|
162
|
+
| `isolation` | boolean | `true` | Wrap with the isolation layer (read-committed + read-your-own-writes; no write-write conflict detection, not snapshot isolation) |
|
|
163
|
+
|
|
164
|
+
### LevelDBStore Options (standalone `open`)
|
|
165
|
+
|
|
166
|
+
| Option | Type | Default | Description |
|
|
167
|
+
|--------|------|---------|-------------|
|
|
168
|
+
| `path` | string | required | Directory path for the database |
|
|
169
|
+
| `createIfMissing` | boolean | `true` | Create database if it doesn't exist |
|
|
170
|
+
|
|
171
|
+
## Example with Transactions
|
|
172
|
+
|
|
173
|
+
```typescript
|
|
174
|
+
import { Database, registerPlugin } from '@quereus/quereus';
|
|
175
|
+
import leveldbPlugin from '@quereus/plugin-leveldb/plugin';
|
|
176
|
+
|
|
177
|
+
const db = new Database();
|
|
178
|
+
await registerPlugin(db, leveldbPlugin, { basePath: './data' });
|
|
179
|
+
|
|
180
|
+
await db.exec(`create table accounts (id integer primary key, balance real) using store`);
|
|
181
|
+
|
|
182
|
+
await db.exec('begin');
|
|
183
|
+
try {
|
|
184
|
+
await db.exec(`update accounts set balance = balance - 100 where id = 1`);
|
|
185
|
+
await db.exec(`update accounts set balance = balance + 100 where id = 2`);
|
|
186
|
+
await db.exec('commit');
|
|
187
|
+
} catch (e) {
|
|
188
|
+
await db.exec('rollback');
|
|
189
|
+
throw e;
|
|
190
|
+
}
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
## Measured read cost (and why no cost ratios are declared)
|
|
194
|
+
|
|
195
|
+
A storage backend can tell the query planner what its basic reads cost, relative to
|
|
196
|
+
reading one row sequentially during a full scan (1.0 by definition). The two knobs live in
|
|
197
|
+
[`@quereus/store`'s `cost-profile.ts`](../quereus-store/src/common/cost-profile.ts):
|
|
198
|
+
`pointRead` (resolving one secondary-index entry to its row, batched) and `seekPositioning`
|
|
199
|
+
(the per-key cost of a multi-key seek). IndexedDB declares measured values; **LevelDB
|
|
200
|
+
declares only the engine's `localDisk` latency category (whose bands come from the tables
|
|
201
|
+
below) and no ratios, so it takes the framework's parity defaults (`pointRead: 1.0`,
|
|
202
|
+
`seekPositioning: 0.5`).** That was previously an assumption. It has now been measured, and
|
|
203
|
+
this section is the record so nobody has to re-ask.
|
|
204
|
+
|
|
205
|
+
### The numbers
|
|
206
|
+
|
|
207
|
+
Measured 2026-08-19 by `packages/quereus/bench/suites/store.bench.mjs`
|
|
208
|
+
(`leveldb-read-cost-20k`, `leveldb-read-cost-200k`) on an AMD Ryzen AI 9 HX 370 (24 cores,
|
|
209
|
+
31 GB, NVMe) running Windows 11 Pro 26200 under node v24.2.0. Values are 200 bytes, keys
|
|
210
|
+
are `encodeCompositeKey` integers, and the arms drive the `KVStore` directly — no
|
|
211
|
+
`Database`, no planner, no isolation overlay.
|
|
212
|
+
|
|
213
|
+
| dataset | arm | per operation | ratio vs sequential |
|
|
214
|
+
| --- | --- | --- | --- |
|
|
215
|
+
| 20 000 rows (~4 MB) | sequential `iterate()`, every value | 0.002514 ms/row | 1.00 (the denominator) |
|
|
216
|
+
| | 1 000 random keys via `getMany`, paged at `ROW_RESOLUTION_BATCH` | 0.003156 ms/row | **1.26** |
|
|
217
|
+
| | 1 000 random single-key `iterate({gte, lt, limit: 1})` | 0.047205 ms/key | **18.78** |
|
|
218
|
+
| 200 000 rows (~40 MB) | sequential `iterate()`, every value | 0.004442 ms/row | 1.00 |
|
|
219
|
+
| | 1 000 random keys via `getMany`, paged | 0.006399 ms/row | **1.44** |
|
|
220
|
+
| | 1 000 random single-key `iterate({gte, lt, limit: 1})` | 0.069098 ms/key | **15.55** |
|
|
221
|
+
|
|
222
|
+
Medians of 13 rounds (20k) and 7 rounds (200k), first round discarded. The 20k row's own
|
|
223
|
+
harness median carried a 28.5% spread and was marked `unstable`, so treat its per-arm
|
|
224
|
+
figures as the noisier pair; the 200k row's spread was 5.0%.
|
|
225
|
+
|
|
226
|
+
### These ratios do not repeat to the decimal — quote the band, not the digits
|
|
227
|
+
|
|
228
|
+
Re-run 2026-08-21 on the same machine, same commit, same benchmark:
|
|
229
|
+
|
|
230
|
+
| dataset | `pointRead` | `seekPositioning` |
|
|
231
|
+
| --- | --- | --- |
|
|
232
|
+
| 20 000 rows | 1.49 (was 1.26) | 14.91 (was 18.78) |
|
|
233
|
+
| 200 000 rows | 1.57 (was 1.44) | 15.25 (was 15.55) |
|
|
234
|
+
|
|
235
|
+
Only the 200k seek figure held; the other three moved by 10-26%. That is what an
|
|
236
|
+
uninstrumented wall-clock ratio on a real filesystem is worth, and it is why these rows are
|
|
237
|
+
`informational` and gate nothing.
|
|
238
|
+
|
|
239
|
+
**So the durable claims are bands, not decimals:** `pointRead` sits somewhere around
|
|
240
|
+
1.3-1.6 at the key-value layer, and one windowed seek key costs roughly 15 sequential rows
|
|
241
|
+
— an order of magnitude above a batched one. Everything below is reasoned from those bands.
|
|
242
|
+
A future decision that needs a specific number must re-measure across several runs; reading
|
|
243
|
+
a digit out of the table above is not a measurement.
|
|
244
|
+
|
|
245
|
+
Re-run with:
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
QUEREUS_BENCH_LEVELDB=1 node packages/quereus/bench/run.mjs --filter store/leveldb-read-cost
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### What the two sizes actually separate
|
|
252
|
+
|
|
253
|
+
**Not** page-cache-cold versus page-cache-warm. There is no portable way to drop the OS
|
|
254
|
+
page cache from Node, and a dataset big enough to exceed a modern machine's page cache
|
|
255
|
+
cannot be seeded inside a benchmark's time budget. What the sizes separate is
|
|
256
|
+
`classic-level`'s own **8 MB block cache**, which this provider does not override: 20 000
|
|
257
|
+
rows fit inside it and are served in-process; 200 000 rows do not, so their random reads go
|
|
258
|
+
out to the filesystem — which on a warm machine usually means the OS page cache, not the
|
|
259
|
+
physical disk. A claim of "cold" that is really "block-cache-miss, page-cache-hit" would be
|
|
260
|
+
worse than no claim, so it is not made.
|
|
261
|
+
|
|
262
|
+
### What the numbers mean, and why no ratio is declared
|
|
263
|
+
|
|
264
|
+
**`pointRead` is near parity and stays undeclared.** Around 1.3-1.6 against a default of
|
|
265
|
+
1.0. That gap is also an *over*-statement of the truth: the planner's 1.0 unit is a scanned
|
|
266
|
+
row *including engine work*, while these arms measured the key-value layer alone. Engine
|
|
267
|
+
overhead lands on both sides of the ratio and therefore compresses it toward 1.0, so the
|
|
268
|
+
engine-inclusive value sits strictly between 1.0 and whatever the key-value ratio happens
|
|
269
|
+
to measure — an interval never measured directly, whose bottom is the current default and
|
|
270
|
+
whose top moves run to run. Declaring the top of it would be picking the pessimistic end of
|
|
271
|
+
a band on no evidence, so the parity default stands.
|
|
272
|
+
|
|
273
|
+
**`seekPositioning` is far from parity, and cannot be fixed by declaring a number.** Around
|
|
274
|
+
15 against a default of 0.5 — a factor of roughly 30. The cause is visible in the raw
|
|
275
|
+
milliseconds: a batched read costs ~3.2 µs per key while a single-key `iterate` costs
|
|
276
|
+
~36-47 µs, so the large majority is fixed per-iterator setup and teardown (snapshot, native
|
|
277
|
+
iterator, close) that `getMany` amortizes over a whole page and a one-key window cannot.
|
|
278
|
+
|
|
279
|
+
That the cost is dominated by fixed setup is also why the seek arm is a fair proxy for the
|
|
280
|
+
secondary-index path even though the benchmark runs it against the **data** store's
|
|
281
|
+
200-byte values rather than an index store's smaller entries: what is being priced is
|
|
282
|
+
opening and closing an iterator, and the payload the window returns is a few microseconds
|
|
283
|
+
of it either way.
|
|
284
|
+
|
|
285
|
+
The obstacle is that **one knob prices two arms whose runtime shapes differ by an order of
|
|
286
|
+
magnitude on this backend**:
|
|
287
|
+
|
|
288
|
+
| arm in `store-module-access-plan.ts` | what it runs (`store-table-scan.ts`) | measured per-key cost |
|
|
289
|
+
| --- | --- | --- |
|
|
290
|
+
| secondary-index multi-seek (`tryIndexAccessPlan`) | one `iterate()` window per distinct tuple prefix over the index store, **plus** the batched row resolution those entries feed (`resolveIndexEntries`, which pages across windows) | ~15 and up (the single-seek arm, which prices the window only) |
|
|
291
|
+
| primary-key multi-seek (`primaryKeyMultiSeekPlan`) | `scanMultiSeekPrimary` → `readEffectiveRowsByKeys`, one round trip per `ROW_RESOLUTION_BATCH` keys, no per-key iterator at all | ~1.3–1.6 (the batched arm) |
|
|
292
|
+
|
|
293
|
+
The secondary arm's true per-key cost is therefore the single-seek figure *plus* a batched
|
|
294
|
+
read, so the gap below is if anything understated — which only strengthens the conclusion.
|
|
295
|
+
|
|
296
|
+
Both charge `seekKeyCount × seekPositioning`. Declaring ~15 would over-charge the
|
|
297
|
+
primary-key arm by roughly ten-fold, and that arm's cost is exactly what `rule-key-set-seek`
|
|
298
|
+
reads at 2 and 1 000 keys (`probeModuleCosts` → `interpolateBreakEven`) to interpolate a
|
|
299
|
+
seek-versus-scan break-even — so the break-even for `where pk in (…)`, a shape that runs
|
|
300
|
+
today, would move about ten-fold in the wrong direction. Declaring 0.5 leaves the secondary
|
|
301
|
+
arm 30-odd× too cheap, which is where it already is and where no misplan has yet been
|
|
302
|
+
observed. A compromise between them (the geometric middle is ~4.5) makes *both* arms about
|
|
303
|
+
3.5× wrong and would need `yarn test:store` to validate, since `seekPositioning` moves plan
|
|
304
|
+
selection on exactly that backend. Trading a known status quo for a new, unvalidated
|
|
305
|
+
wrongness on a live query shape is not worth doing for a measurement that cannot be acted on
|
|
306
|
+
until the knob splits.
|
|
307
|
+
|
|
308
|
+
Splitting the knob so each arm can be priced honestly is
|
|
309
|
+
`backlog/debt-store-seek-positioning-conflates-two-arms`; the decision about what LevelDB
|
|
310
|
+
should ultimately declare is `backlog/debt-leveldb-cost-profile-measurement`, which stays
|
|
311
|
+
open on purpose.
|
|
312
|
+
|
|
313
|
+
## Related Packages
|
|
314
|
+
|
|
315
|
+
- [`@quereus/store`](../quereus-store/) - Core storage module (StoreModule, StoreTable)
|
|
316
|
+
- [`@quereus/plugin-indexeddb`](../quereus-plugin-indexeddb/) - IndexedDB plugin for browsers
|
|
317
|
+
|
|
318
|
+
## License
|
|
319
|
+
|
|
320
|
+
MIT
|
|
321
|
+
|
package/dist/src/provider.d.ts
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
* per-directory layout (`{basePath}/{schema}/{table}`) are NOT read here and must
|
|
20
20
|
* be re-created (pre-1.0 dev data). There is no on-disk migration. See README.
|
|
21
21
|
*/
|
|
22
|
-
import type { AtomicBatch, KVStore, KVStoreProvider } from '@quereus/store';
|
|
22
|
+
import type { AtomicBatch, KVCostProfile, KVStore, KVStoreProvider } from '@quereus/store';
|
|
23
23
|
/**
|
|
24
24
|
* Options for creating a LevelDB provider.
|
|
25
25
|
*/
|
|
@@ -49,6 +49,7 @@ export interface LevelDBProviderOptions {
|
|
|
49
49
|
* sublevel per logical store.
|
|
50
50
|
*/
|
|
51
51
|
export declare class LevelDBProvider implements KVStoreProvider {
|
|
52
|
+
readonly costProfile: KVCostProfile;
|
|
52
53
|
private basePath;
|
|
53
54
|
private createIfMissing;
|
|
54
55
|
private syncCommits;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AA8C3F;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACtC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;IAE1B;;;;;;;OAOG;IACH,WAAW,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AA4CH,qBAAa,eAAgB,YAAW,eAAe;IACtD,QAAQ,CAAC,WAAW,EAAE,aAAa,CAA0B;IAE7D,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,WAAW,CAAU;IAE7B,6CAA6C;IAC7C,OAAO,CAAC,IAAI,CAA0B;IACtC,+EAA+E;IAC/E,OAAO,CAAC,WAAW,CAAmC;IAEtD,4DAA4D;IAC5D,OAAO,CAAC,MAAM,CAAmC;IACjD,mFAAmF;IACnF,OAAO,CAAC,YAAY,CAA4C;IAChE;;;;OAIG;IACH,OAAO,CAAC,eAAe,CAAoC;gBAE/C,OAAO,EAAE,sBAAsB;IAMrC,QAAQ,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAOrG,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAIzF,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKxE,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAInC,UAAU,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIhE,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxF,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAwBzB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIzF,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IA0ErH,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB5G;;;;;;;;;;;;;OAaG;IACH,gBAAgB,IAAI,WAAW,GAAG,SAAS;IAM3C;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAWvB,yDAAyD;YAC3C,OAAO;IAoBrB,sFAAsF;IACtF,OAAO,CAAC,YAAY;YAON,gBAAgB;YA2BhB,iBAAiB;YASjB,gBAAgB;IAU9B,4EAA4E;YAC9D,iBAAiB;CAK/B;AAqDD;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,sBAAsB,GAAG,eAAe,CAEtF"}
|
package/dist/src/provider.js
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
*/
|
|
22
22
|
import { ClassicLevel } from 'classic-level';
|
|
23
23
|
import { buildDataStoreName, buildIndexStoreName, CATALOG_STORE_NAME, STATS_STORE_NAME } from '@quereus/store';
|
|
24
|
-
import { QuereusError, StatusCode } from '@quereus/quereus';
|
|
24
|
+
import { COST_PRESETS, QuereusError, StatusCode } from '@quereus/quereus';
|
|
25
25
|
import { LevelDBStore } from './store.js';
|
|
26
26
|
const textEncoder = new TextEncoder();
|
|
27
27
|
/**
|
|
@@ -61,12 +61,12 @@ function encodeSublevelName(name) {
|
|
|
61
61
|
* LevelDB implementation of KVStoreProvider over a single shared root with one
|
|
62
62
|
* sublevel per logical store.
|
|
63
63
|
*/
|
|
64
|
-
// NOTE: no
|
|
65
|
-
// decision, not the absence of one. This provider
|
|
66
|
-
// defaults (`pointRead: 1.0`, `seekPositioning: 0.5`).
|
|
67
|
-
// `leveldb-read-cost-*` rows measured both knobs at the
|
|
68
|
-
// values; the full table, machine and caveats are in this
|
|
69
|
-
// (§ Measured read cost). In short:
|
|
64
|
+
// NOTE: no cost RATIOS (`pointRead`, `seekPositioning`) in the `costProfile`, deliberately —
|
|
65
|
+
// and as of 2026-08-19 that is a MEASURED decision, not the absence of one. This provider
|
|
66
|
+
// takes the store framework's parity defaults (`pointRead: 1.0`, `seekPositioning: 0.5`).
|
|
67
|
+
// `bench/suites/store.bench.mjs`'s `leveldb-read-cost-*` rows measured both knobs at the
|
|
68
|
+
// key-value layer over 200-byte values; the full table, machine and caveats are in this
|
|
69
|
+
// package's README (§ Measured read cost). In short:
|
|
70
70
|
//
|
|
71
71
|
// - `pointRead` came back NEAR the 1.0 default (around 1.3-1.6), and an OVER-statement of
|
|
72
72
|
// it besides: the planner's 1.0 unit is a scanned row INCLUDING engine work, while these
|
|
@@ -95,15 +95,17 @@ function encodeSublevelName(name) {
|
|
|
95
95
|
// is priced 30x too cheap. The decision itself stays open as
|
|
96
96
|
// backlog/debt-leveldb-cost-profile-measurement.
|
|
97
97
|
//
|
|
98
|
-
// NOTE:
|
|
99
|
-
//
|
|
100
|
-
//
|
|
101
|
-
//
|
|
102
|
-
//
|
|
103
|
-
//
|
|
104
|
-
//
|
|
105
|
-
//
|
|
98
|
+
// NOTE: the latency half of the `costProfile` is the engine's `localDisk` CATEGORY, not a
|
|
99
|
+
// number measured for this declaration. The category's bands come from this package's own
|
|
100
|
+
// README table (§ Measured read cost: the single-key windowed iterate for the first row, the
|
|
101
|
+
// sequential iterate for each further row), and the decimals still live in that README, not
|
|
102
|
+
// here. What declaring it buys is join selection — at the default `tuning.latencyCostPerMs`
|
|
103
|
+
// a disk-backed row now costs about 5 engine units where a memory row costs 1. It turns no
|
|
104
|
+
// parallel machinery on: `localDisk` sits far below the 25 ms `tuning.parallel.*ThresholdMs`
|
|
105
|
+
// gates. Revisit only with a multi-run measurement of first-row and per-row latency taken
|
|
106
|
+
// for the purpose; then spread the preset and override (`{ ...COST_PRESETS.localDisk, … }`).
|
|
106
107
|
export class LevelDBProvider {
|
|
108
|
+
costProfile = COST_PRESETS.localDisk;
|
|
107
109
|
basePath;
|
|
108
110
|
createIfMissing;
|
|
109
111
|
syncCommits;
|
package/dist/src/provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"provider.js","sourceRoot":"","sources":["../../src/provider.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@quereus/plugin-leveldb",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.24.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "LevelDB storage plugin for Quereus - Node.js persistent storage",
|
|
6
6
|
"keywords": [
|
|
@@ -37,9 +37,9 @@
|
|
|
37
37
|
}
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
|
-
"@quereus/isolation": "^4.
|
|
41
|
-
"@quereus/quereus": "^4.
|
|
42
|
-
"@quereus/store": "^4.
|
|
40
|
+
"@quereus/isolation": "^4.24.0",
|
|
41
|
+
"@quereus/quereus": "^4.24.0",
|
|
42
|
+
"@quereus/store": "^4.24.0"
|
|
43
43
|
},
|
|
44
44
|
"engines": {
|
|
45
45
|
"quereus": "^0.24.0"
|
|
@@ -96,8 +96,8 @@
|
|
|
96
96
|
"test": "cd ../.. && node --import ./packages/quereus-plugin-leveldb/register.mjs node_modules/mocha/bin/mocha.js \"packages/quereus-plugin-leveldb/test/**/*.spec.ts\" --reporter min --colors"
|
|
97
97
|
},
|
|
98
98
|
"dependencies": {
|
|
99
|
-
"@quereus/quereus": "^4.
|
|
100
|
-
"@quereus/store": "^4.
|
|
99
|
+
"@quereus/quereus": "^4.24.0",
|
|
100
|
+
"@quereus/store": "^4.24.0",
|
|
101
101
|
"abstract-level": "^3.1.0",
|
|
102
102
|
"classic-level": "^3.0.0"
|
|
103
103
|
},
|