content addressable blob store for node
A Content Addressable Blob Store for Node.
This implements something similar to the object store from
.git/objects folder). By default blobs stored by cabs are
sha256 hashed and stored in subdirectories to avoid putting too many files in a single directory. The hashing algorithm and depth of the directories are configurable.
Cabswritepath hashFunction limit;
Pipe in a blob stream (e.g. fs.createReadStream), get back objects for the various pieces stored. Each object has a hash of the block, as well as the starting and ending locations within the stream. You may optionally pass a string representing the hash function to use (default
sha256) and number representing the block size (defaults to 5 MB).
To learn more about hashing algorithm tradeoffs read the comments on this issue.
Pipe in the objects from write, returns a readable stream of the blob.
var fs = require'fs'var Cabs = require'cabs'/** stream a movie into cabs, store hashes in hashes.json **/fscreateReadStream'movie.avi'pipeCabswrite'./storage'pipefscreateWriteStream'hashes.json';/** later, to retrieve the movie, stream the hashes into cabs **/fscreateReadStream'hashes.json'pipeCabsread'./storage)).pipe(fs.createWriteStream('movie-copyavi'));
you also have access to the base Cabs class located at
cabs.Cabs, initialize it with a location and optionally an options object wtih a string representing the hash function to use (Defaults to sha256), the block size limit (defaults to 5 MB) and the depth of folders to use.
var store = './location';// orvar store =path: './location'hashFunction: 'sha256'limit: 5 * 1024 *1024depth: 3;storewritebuffer callback;//stores buffer, callback is called with the hashstorereadhash callback;//calls the callback with the blobstorermhash callback;//removes the file with the given hashstoredestroycallback;//deletes all the files related to the store, just a shortcut to rimraf so beware.storereadStream;//same as Cabs.readstorewriteStream;//same as Cabs.writestorehashash callback;//calls callback with true if it exists, otherwise falsestorecheckhash callback;//similar to has but throws an error if the file doesn't exist//or it's hash doesn't match it's address hashstorewriteFile;//write to a single file on disc. Will only ever emit a single string//the hash for the combined file you streamed in.//unlike writeStream which chunks a big file into multiple smaller ones//which can be handled in memory, this method buffers to disk.