hamt-sharding

JavaScript implementation of sharding using hash array mapped tries

Usage no npm install needed!

<script type="module">
  import hamtSharding from 'https://cdn.skypack.dev/hamt-sharding';
</script>

README

hamt-sharding

standard-readme compliant Build Status Codecov Dependency Status js-standard-style

JavaScript implementation of hamt for use in sharding

Table of Contents

Install

> npm install hamt-sharding

Usage

Example

import { createHAMT } from 'hamt-sharding'
import crypto from 'crypto-promise'

// decide how to hash buffers made from keys, can return a Promise
const hashFn = async (buf) => {
  return crypto
    .createHash('sha256')
    .update(buf)
    .digest()
}

const bucket = createHAMT({
  hashFn: hashFn
})

await bucket.put('key', 'value')

const output = await bucket.get('key')
// output === 'value'

API

import { createHAMT } from 'hamt-sharding'

bucket.put(key, value)

import { createHAMT } from 'hamt-sharding'
const bucket = createHAMT({...})

await bucket.put('key', 'value')

bucket.get(key)

import { createHAMT } from 'hamt-sharding'
const bucket = createHAMT({...})

await bucket.put('key', 'value')

console.info(await bucket.get('key')) // 'value'

bucket.del(key)

import { createHAMT } from 'hamt-sharding'
const bucket = createHAMT({...})

await bucket.put('key', 'value')
await bucket.del('key', 'value')

console.info(await bucket.get('key')) // undefined

bucket.leafCount()

import { createHAMT } from 'hamt-sharding'
const bucket = createHAMT({...})

console.info(bucket.leafCount()) // 0

await bucket.put('key', 'value')

console.info(bucket.leafCount()) // 1

bucket.childrenCount()

import { createHAMT } from 'hamt-sharding'
const bucket = createHAMT({...})

console.info(bucket.childrenCount()) // 0

await bucket.put('key', 'value')

console.info(bucket.childrenCount()) // 234 -- dependent on hashing algorithm

bucket.onlyChild()

bucket.eachLeafSeries()

import { createHAMT } from 'hamt-sharding'
const bucket = createHAMT({...})

await bucket.put('key', 'value')

for await (const child of bucket.eachLeafSeries()) {
  console.info(child.value) // 'value'
}

bucket.serialize(map, reduce)

bucket.asyncTransform(asyncMap, asyncReduce)

bucket.toJSON()

bucket.prettyPrint()

bucket.tableSize()

Contribute

Feel free to join in. All welcome. Open an issue!

This repository falls under the IPFS Code of Conduct.

License

MIT