# Datastore Configuration Options This document describes the different possible values for the `Datastore.Spec` field in the ipfs configuration file. ## flatfs Stores each key value pair as a file on the filesystem. The shardFunc is prefixed with `/repo/flatfs/shard/v1` then followed by a descriptor of the sharding strategy. Some example values are: - `/repo/flatfs/shard/v1/next-to-last/2` - Shards on the two next to last characters of the key - `/repo/flatfs/shard/v1/prefix/2` - Shards based on the two character prefix of the key ```json { "type": "flatfs", "path": "", "shardFunc": "", "sync": true|false } ``` NOTE: flatfs should only be used as a block store (mounted at `/blocks`) as the current implementation is not complete. ## levelds Uses a leveldb database to store key value pairs. ```json { "type": "levelds", "path": "", "compression": "none" | "snappy", } ``` ## badgerds Uses [badger](https://github.com/dgraph-io/badger) as a key value store. * `syncWrites`: Flush every write to disk before continuing. Disabling this option may leave your datastore in an inconsistent state after a crash. * `truncate`: Truncate the DB if a partially written sector is found (defaults to true). This only happens if a IPFS crashes half-way through a write so this option is usually safe to leave on. ```json { "type": "badgerds", "path": "", "syncWrites": true|false, "truncate": true|false, } ``` ## mount Allows specified datastores to handle keys prefixed with a given path. The mountpoints are added as keys within the child datastore definitions. ```json { "type": "mount", "mounts": [ { // Insert other datastore definition here, but add the following key: "mountpoint": "/path/to/handle" }, { // Insert other datastore definition here, but add the following key: "mountpoint": "/path/to/handle" }, ] } ``` ## measure This datastore is a wrapper that adds metrics tracking to any datastore. ```json { "type": "measure", "prefix": "sometag.datastore", "child": { datastore being wrapped } } ```