0.4.3 • Published 2 years ago

@phorbas/store v0.4.3

Weekly downloads
1
License
BSD-2-Clause
Repository
github
Last release
2 years ago

PHORBAS Store

A PHORBAS store is an associative 1:1 binary key to binary content data storage abstraction. Keys are binary as a result of cryptographic hashing from PHORBAS Opaque, and content is binary as a result of encryption. The store handles the principles of Persistent, Binary key/content, Addressable, and Store.

API & Use

Storage Implementations

Local

Technology / LibraryImplementation
JS Map (NodeJS) new Map()impl: code/js_map.jsy test: test/unittest.node.mjs
JS Map (Web) new Map()impl: code/js_map.jsy test: test/unittest.web.mjs
Browser IndexedDB API globalThis.indexedDB.open()impl: code/web/web_db.jsy test: test/unittest.web.mjs
Browser Fetch API globalThis.fetch()impl: code/web/web_fetch.jsy test: test/unittest.web.mjs
Browser Service Worker Cache API globalThis.caches.open()impl: code/web/web_cache.jsy test: test/unittest.web.mjs
Node FS API require('fs')impl: code/local/fs.jsy test: test/int--fsp/integ-test.mjs
Node FS Promises API require('fs').promisesimpl: code/local/fsp.jsy test: test/int--fsp/integ-test.mjs
Web FS API lightning-fs from isomorphic-gitimpl: code/local/fsp.jsy test: test/unittest.web.mjs
Web FSP Promises API lightning-fs from isomorphic-gitimpl: code/local/fsp.jsy test: test/unittest.web.mjs
LMDB node-lmdbimpl: code/nosql/lmdb.jsy test: test/int--level/integ-test.mjs

Also see SQLite and Level-based adapters for local / embedded alternatives.

NoSQL

Technology / LibraryImplementation
⚠️ArangoDB arangojsimpl: code/nosql/arangojs.jsy test: test/int--arangodb/integ-test.mjs note: Binary values encode in base64
⚗️Cassandra cassandra-driverintended; need help setting up Docker integration testing
⚗️Couchbaseintended
CouchDB nanoimpl: code/nosql/couchdb.jsy test: test/int--couchdb/integ-test.mjs
Consul KV node-consulimpl: code/nosql/consulkv.jsy test: test/int--consulkv/integ-test.mjs
AWS DynamoDB aws-sdkimpl: code/nosql/dynamodb.jsy test: test/int--dynamodb/integ-test.mjs
LMDB node-lmdbimpl: code/nosql/lmdb.jsy test: test/int--level/integ-test.mjs
Memcache memjsimpl: code/nosql/memjs.jsy test: test/int--memcache/integ-test.mjs
MongoDB mongojsimpl: code/nosql/mongojs.jsy test: test/int--mongodb/integ-test.mjs
PouchDB pouchdbimpl: code/nosql/pouchdb.jsy test node: test/unittest.web.mjs test web: test/unittest.web.mjs test with couchdb: test/int--couchdb/integ-test.mjs
Redis ioredisimpl: code/nosql/ioredis.jsy test: test/int--redis/integ-test.mjs
RethinkDB rethinkdbimpl: code/nosql/rethinkdb.jsy test: test/int--rethinkdb/integ-test.mjs
⚗️ScyllaDB cassandra-driverintended; need help setting up Docker integration testing
S3 NoSQL
Technology / LibraryImplementation
MinIO minioimpl: code/nosql/minio.jsy test: test/int--s3api/integ-test.mjs
AWS S3 or compatible aws4fetchimpl: code/nosql/s3_aws4fetch.jsy test: test/unittest.web.mjs

Also see s3leveldown Level-based adapter.

SQL and Knex adapter

Technology / LibraryImplementation
SQLite node-sqlite3impl: code/sql/sqlite.jsy test: test/int--sqlite3/integ-test.mjs
SQLite knex.jsimpl: code/sql/knex.jsy test: test/int--sqlite3/integ-test.mjs
PostgreSQL knex.jsimpl: code/sql/knex.jsy test: test/int--postgres/integ-test.mjs
CockroachDB knex.jsimpl: code/sql/knex.jsy test: test/int--postgres/integ-test.mjs
CrateDB knex.jsimpl: code/sql/knex.jsy test: test/int--postgres/integ-test.mjs note: Crate SQL lacks BLOB in-table support
MariaDB knex.jsimpl: code/sql/knex.jsy test: test/int--mysql/integ-test.mjs note: Uses MEDIUMBLOB
MySQL knex.jsimpl: code/sql/knex.jsy test: test/int--mysql/integ-test.mjs note: Uses MEDIUMBLOB
Microsoft SQL Server knex.jsimpl: code/sql/knex.jsy test: test/int--mssql-server/integ-test.mjs

Storage Adapters

Level adapter
Technology / LibraryImplementation
LevelDB leveldownimpl: code/adapter/level.jsy test: test/int--level/integ-test.mjs
memdown memdownimpl: code/adapter/level.jsy test: test/int--level/integ-test.mjs
subleveldown sharing subleveldownimpl: code/adapter/level.jsy test: test/int--level/integ-test.mjs
RocksDB rocksdbimpl: code/adapter/level.jsy test: test/int--level/integ-test.mjs
Medea medeadownimpl: code/adapter/level.jsy test: test/int--level/integ-test.mjs
Redis redisdownimpl: code/adapter/level.jsy test: test/int--redis/integ-test.mjs
AWS S3 or compatible s3leveldownimpl: code/adapter/level.jsy test: test/int--s3api/integ-test.mjs
SQLite level and impl: code/adapter/level.jsy test: test/int--sqlite3/integ-test.mjs
Keyv adapter
Technology / LibraryImplementation
JavaScript Map keyv and new Map()impl: code/adapter/keyv.jsy test: test/unittest.node.mjs
⚠️One file keyv and keyv-fileimpl: code/adapter/keyv.jsy test: test/int--fsp/integ-test.mjs Stored in a single JSON file with binary values encode in base64
Memcache keyv and keyv-memcacheimpl: code/adapter/keyv.jsy test: test/int--memcache/integ-test.mjs
MongoDB keyv and @keyv/mongoimpl: code/adapter/keyv.jsy test: test/int--mongodb/integ-test.mjs
SQLite keyv and @keyv/sqliteimpl: code/adapter/keyv.jsy test: test/int--sqlite3/integ-test.mjs
PostgreSQL keyv and @keyv/postgresimpl: code/adapter/keyv.jsy test: test/int--postgres/integ-test.mjs note: Failed
MariaDB keyv and @keyv/mysqlimpl: code/adapter/keyv.jsy test: test/int--mysql/integ-test.mjs note: Failed to store large blobs
MySQL keyv and @keyv/mysqlimpl: code/adapter/keyv.jsy test: test/int--mysql/integ-test.mjs note: Failed to store large blobs

About PHORBAS

The PHORBAS project implements a persistent binary data storage scheme that accomodates opaque (encrypted) information. It is inspired by binary content addressable data storage, replication features of CouchDB, the opaque data storage of Tahoe-LAFS, the eventual consistency of CRDTs, and persistent Hash array mapped trie data structures.

Phorbas appears in in Greek mythology and is connected to "giving pasture" -- in this case, safe pasture to for data storage.

P - Persistent
H - Hashed
O - Opaque
R - Replicable
B - Binary key/content
A - Addressable
S - Store

Due to the opaque nature of the data storage, the storage is not queryable like a database. It is similar to IPFS with a less ambitious goal of being a pratical data storage scheme for data for embedding into other projects.

License

2-Clause BSD

0.4.3

2 years ago

0.4.1

2 years ago

0.4.0

2 years ago

0.4.2

2 years ago

0.3.2

2 years ago

0.3.4

2 years ago

0.3.3

2 years ago

0.3.1

2 years ago

0.2.15

2 years ago

0.3.0

2 years ago

0.2.14

2 years ago

0.2.13

2 years ago

0.2.12

2 years ago

0.2.11

3 years ago

0.2.10

3 years ago

0.2.7

3 years ago

0.2.9

3 years ago

0.2.8

3 years ago

0.2.6

3 years ago

0.2.1

3 years ago

0.2.3

3 years ago

0.2.2

3 years ago

0.2.5

3 years ago

0.2.4

3 years ago

0.2.0

3 years ago

0.1.5

4 years ago

0.1.4

4 years ago

0.1.3

4 years ago

0.1.2

4 years ago

0.1.1

4 years ago

0.1.0

4 years ago

0.0.1

4 years ago