Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

orbit-db-mfsstore

Package Overview
Dependencies
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

orbit-db-mfsstore

MFS backed Key-Value Store for orbit-db

  • 0.0.11
  • latest
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

orbit-db-mfsstore

Gitter Matrix Discord

Key-Value database for orbit-db backed by IPFS MFS.

A key-value database backed by the IPFS Mutable File System. Also allows indexing and searching by non-primary indexes. Unlike other orbit-db stores it does not load the entire dataset into memory. Each store uses a schema and when records are inserted we build btree indexes. They get built and stored locally.

Used in orbit-db.

Table of Contents

Install

npm install orbit-db ipfs orbit-db-mfsstore

Usage

First, create an instance of OrbitDB:

const MfsStore = require('orbit-db-mfsstore')
const IPFS = require('ipfs')
const OrbitDB = require('orbit-db')

const ipfs = new IPFS()
const orbitdb = await OrbitDB.createInstance(ipfs)

Add custom datastore type

OrbitDB.addDatabaseType("mfsstore", MfsStore)

Create a datastore with a schema. In this example we're saving baseball players. We'll add 4 different indexed fields. Indexes and can unique.

store = await orbitdb.open("baseballplayers", {
    create: true, 
    type: "mfsstore",
    schema: {
        name: { unique: false },
        currentTeam: { unique: false },
        battingHand: { unique: false },
        throwingHand: { unique: false }
    }
})

Add a record and retreive it by the primary key



  //Save it
  await store.put(101, {
      name: "Andrew McCutchen",
      currentTeam: "PIT",
      battingHand: "R",
      throwingHand: "R"
  })


  //Retreive it
  let player = await store.get(101)


Now we're going to add a few more players

  await store.put(102, {
    id: 102,
    name: "Pedro Alvarez",
    currentTeam: "BAL",
    battingHand: "R",
    throwingHand: "R"
  })

  await store.put(103, {
      id: 103,
      name: "Jordy Mercer",
      currentTeam: "PIT",
      battingHand: "L",
      throwingHand: "R"
  })

  await store.put(104, {
      id: 104,
      name: "Doug Drabek",
      currentTeam: "BAL",
      battingHand: "L",
      throwingHand: "R"
  })

Now retreive the values by the secondary indexes.

  
  //Get players who play for PIT
  let teamPIT = await store.getByIndex("currentTeam", "PIT", "desc", 0, 100)

  //Get players who who bat right handed. 
  let battingR = await store.getByIndex("battingHand", "R", "desc", 0, 100)


API

See orbit-db's API Documenations for full details.

An MFSStore has the following additional functions:

store.list(offset, limit)

  • Returns a subset of the available records based on the offset and limit. Allows for paging.
//Returns the recordset starting at the first record. Returns 100 records.
let result = await store.list(0, 100)

store.getByIndex(indexName, value, sortDirection, offset, limit )

  • Returns a subset of records stored in the index that match the passed in value. Offset and limit allow for paging.
//Returns the recordset of records where the currentTeam attribute is set to "PIT". 
//Sorts the records in descending order and starts at the first record. 
//Returns 100 records.
let result = await store.getByIndex("currentTeam", "PIT", "desc", 0, 100 )

store.count()

  • Returns the total number of records stored in the store. Does not load the actual records into memory.
let count = await store.count()

Contributing

If you think this could be better, please open an issue!

Please note that all interactions in @orbitdb fall under our Code of Conduct.

License

MIT ©️ 2016-2018 Protocol Labs Inc., 2018 Haja Networks Oy

Keywords

FAQs

Package last updated on 11 Jan 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc