feat: portable graph export()/import() (BackupData v1) on brain.data()
brain.data() now serializes part or all of a brain to a versioned, portable
JSON document (BackupData) and restores it — the path for partial backups,
cross-environment moves, and 7.x→8.0 migration.
- export(selector?, options?): select by ids, collection (+transitive Contains),
connected neighbourhood, vfsPath subtree, predicate, or whole brain; structural
and predicate selectors compose. Options: includeVectors, includeContent (VFS
blobs), includeSystem, edges ('induced'|'incident'|'none').
- import(backup, options?): onConflict 'merge' (dedup-by-id) | 'replace' | 'skip';
reembed 'auto' (re-embed from data when no vector carried) | 'never'; remapIds
to clone a subgraph under fresh ids.
- BackupData v1: format/formatVersion/brainyVersion/createdAt/embedding/entities/
relations/blobs?/danglingIds?/stats. Reserved fields (subtype, data, confidence,
weight, service) top-level; metadata custom-only. Current-state, no generations.
- Replaces the prior flat-entity export() (dropped relations) with a graph-complete
document. Distinct from brain.import(file) ingestion, which is unchanged.
- Export BackupData/BackupEntity/BackupRelation/ExportSelector/ExportOptions/
ImportOptions/ImportResult/DataAPI from the package root. CLI `brainy export`
now writes a BackupData document.
Guide: docs/guides/backup-and-export.md. Tests: tests/unit/api/data-backup.test.ts.
This commit is contained in:
parent
89c6d043ba
commit
a408d3799d
11 changed files with 1393 additions and 382 deletions
|
|
@ -457,23 +457,19 @@ await brain.storage.withLock('resource-id', async () => {
|
|||
|
||||
### Export Data
|
||||
```typescript
|
||||
// Export entire database
|
||||
const backup = await brain.export({
|
||||
format: 'json',
|
||||
includeVectors: true,
|
||||
includeIndexes: false
|
||||
})
|
||||
// Export the whole brain to a portable BackupData document
|
||||
const backup = await brain.data().then(d => d.export(undefined, { includeVectors: true }))
|
||||
```
|
||||
|
||||
### Import Data
|
||||
```typescript
|
||||
// Import from backup
|
||||
await brain.import(backup, {
|
||||
mode: 'merge', // or 'replace'
|
||||
validateSchema: true
|
||||
})
|
||||
// Restore a BackupData document (dedup-by-id merge by default)
|
||||
await brain.data().then(d => d.import(backup, { onConflict: 'merge' }))
|
||||
```
|
||||
|
||||
See the [Export & Import guide](../guides/export-and-import.md) for partial exports
|
||||
(by id, collection, connected neighbourhood, VFS subtree, or predicate).
|
||||
|
||||
### Storage Migration
|
||||
```typescript
|
||||
// Migrate between storage types
|
||||
|
|
@ -483,9 +479,9 @@ const newBrain = new Brainy({ storage: { type: 's3' } })
|
|||
await oldBrain.init()
|
||||
await newBrain.init()
|
||||
|
||||
// Transfer all data
|
||||
const data = await oldBrain.export()
|
||||
await newBrain.import(data)
|
||||
// Transfer all data via a portable backup
|
||||
const data = await oldBrain.data().then(d => d.export(undefined, { includeVectors: true }))
|
||||
await newBrain.data().then(d => d.import(data))
|
||||
```
|
||||
|
||||
## Performance Tuning
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue