Most API methods accept an [AbortSignal][] as part of an options object. Implementations may listen for an abort event emitted by this object, or test the signal.aborted property. When received implementations should tear down any long-lived requests or resources created.
The streaming (put|get|delete)Many methods are intended to be used with modules such as it-parallel-batch to allow calling code to control levels of parallelisation. The batching method ensures results are returned in the correct order, but interface implementations should be thread safe.
// put values into the datastore concurrently, max 10 at a time forawait (const { key, data } ofbatch(store.putMany(source), 10)) { console.info(`Put ${key}`) }
To allow a better abstraction on how to address values, there is a Key class which is used as identifier. It's easy to create a key from a Uint8Array or a string.
The key scheme is inspired by file systems and Google App Engine key model. Keys are meant to be unique across a system. They are typically hierarchical, incorporating more and more specific namespaces. Thus keys can be deemed 'children' or 'ancestors' of other keys:
new Key('/Comedy')
new Key('/Comedy/MontyPython')
Also, every namespace can be parameterized to embed relevant object information. For example, the Key name (most specific namespace) could include the object type:
new Key('/Comedy/MontyPython/Actor:JohnCleese')
new Key('/Comedy/MontyPython/Sketch:CheeseShop')
new Key('/Comedy/MontyPython/Sketch:CheeseShop/Character:Mousebender')
A Datastore is a key/value database that lets store/retrieve binary blobs using namespaced Keys.
It is used by IPFS to store/retrieve arbitrary metadata needed to run the node - DHT provider records, signed peer records, etc.
Backed Implementations
datastore-fs
datastore-idb
datastore-level
(supports any levelup compatible backend)datastore-core/memory
datastore-s3
Wrapper Implementations
datstore-core/src/keytransform
datastore-core/src/mount
datastore-core/src/namespace
datastore-core/src/sharding
datstore-core/src/tiered
If you want the same functionality as go-ds-flatfs, use sharding with fs.
Example
Test suite
Available via the
interface-datastore-tests
moduleAborting requests
Most API methods accept an [AbortSignal][] as part of an options object. Implementations may listen for an
abort
event emitted by this object, or test thesignal.aborted
property. When received implementations should tear down any long-lived requests or resources created.Concurrency
The streaming
(put|get|delete)Many
methods are intended to be used with modules such as it-parallel-batch to allow calling code to control levels of parallelisation. The batching method ensures results are returned in the correct order, but interface implementations should be thread safe.Keys
To allow a better abstraction on how to address values, there is a
Key
class which is used as identifier. It's easy to create a key from aUint8Array
or astring
.The key scheme is inspired by file systems and Google App Engine key model. Keys are meant to be unique across a system. They are typically hierarchical, incorporating more and more specific namespaces. Thus keys can be deemed 'children' or 'ancestors' of other keys:
new Key('/Comedy')
new Key('/Comedy/MontyPython')
Also, every namespace can be parameterized to embed relevant object information. For example, the Key
name
(most specific namespace) could include the object type:new Key('/Comedy/MontyPython/Actor:JohnCleese')
new Key('/Comedy/MontyPython/Sketch:CheeseShop')
new Key('/Comedy/MontyPython/Sketch:CheeseShop/Character:Mousebender')