Socket
Socket
Sign inDemoInstall

orbit-db-mfsstore

Package Overview
Dependencies
264
Maintainers
1
Versions
11
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    orbit-db-mfsstore

MFS backed Key-Value Store for orbit-db


Version published
Weekly downloads
16
increased by300%
Maintainers
1
Created
Weekly downloads
 

Readme

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

Last updated on 11 Jan 2021

Did you know?

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

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc