1.0.3 • Published 8 years ago

ki1r0y.fs-store v1.0.3

Weekly downloads
1
License
MIT License
Repository
github
Last release
8 years ago

ki1r0y.fs-store

A very simple file-based document store for (mostly) json.

Intended for large numbers (millions) of small documents. HOWEVER: This version puts all the documents of a collection into the same directory. That puts a file-system-dependent limit on the number of documents in a collection. There is no memory cache and no (known) memory leaks.

Access is asynchronous, with standard NodeJS callbacks. Data read-write integrity is provided for overlapping aysnchronous requests, but not their asynchronous callbacks, and only within the application. I.e., read/write data integrity is not guaranteed between other processes using the same underlying files, or even separate processes using fs-store.

Results are undefined if an external program modifies json files with corrupt json.

No protection is given for having too many open files. The application should limit parallel requests as needed.

A collectionName is a string naming a directory in the file system. Missing directories will be created as needed. A documentName is a collectionName followed by path.sep and a documentId that must be unique within the collection. Both have the same case sensitivity and character requirements as the file system. (For portability, case-insenstive a collectionName and documentName is required.)

Document Operations

getBuffer(documentName, callback)
get(documentName, callback)
getWithModificationTime(documentName, callback)

Invoke callback(error, contentBuffer), callback(error, contentData), callback(error, contentData, DateTime), respectively. Here contentBuffer is as by fs.readFile, and contentData is the result of JSON.parse of the contentBuffer.

setBuffer(documentName, contentBuffer, callback)
set(documentName, contentData, callback)

Invoke callback(error) after storing contentBuffer or contentData at the specified documentName, respectively.

update(documentName, defaultValue, transformer, callback)

Invokes transformer(oldData, writerFunction) on the contents of the document, where oldData is the parsed content of documentName if the document exists, else defaultValue. The transformer must in turn call writerFunction(error, newData, optionalResult), which will leave newData as the sole content of the file unless newData is undefined or error is truthy, in which case no change is made to the document. (The writerFunction may be called synchronously. I.e., there is not need to delay it with setImmediate, etc.) Finally, callback(error, optionalResult) is invoked.

rename(sourcePathname, documentName, callback)
exists(documentName, callback)
destroy(documentName, callback)

These have the same semantics as fs.rename, fs.exists, and fs.unlink, except that they operate on documentName (e.g., creating missing directories).

ensure(documentName, callback)

Ensures that a document exists at documentName, without modifying any existing document there. However, it is not specified whether the modification time (as reported by getWithModificationTime) of an existing document is updated.

Collection Operations

ensureCollection(collectionName, callback)
destroyCollection(collectionName, callback)

Like ensure and destroy, but for collections. In both cases, the collection need not be empty.

iterateIdentifiers(collectionName, iterator, callback)
iterateDocuments(collectionName, iterator, callback)

Invoke iterator(doc, documentId, cb) on each document in the collection, in an unspecified order (and which may be in parallel). The doc is either the documentName or the contentData, respectively. The iterator must call cb(error), and it must do so asynchronously (e.g., using setImmediate, nextTick or similar if necessary). Per-document read/write consistency is guaranteed during the execution of each iterator. However, there are no guarantees on timeliness of coordination between iterator and additions/removals to the collection.

Other Operations

doesNotExist(error)

Answers true iff the specified document does not exist, where error is as above.