{"id":13504357,"url":"https://github.com/tidwall/summitdb","last_synced_at":"2025-09-27T10:30:52.121Z","repository":{"id":37587597,"uuid":"70629059","full_name":"tidwall/summitdb","owner":"tidwall","description":"In-memory NoSQL database with ACID transactions, Raft consensus, and Redis API","archived":true,"fork":false,"pushed_at":"2022-04-22T22:22:15.000Z","size":3522,"stargazers_count":1410,"open_issues_count":12,"forks_count":76,"subscribers_count":45,"default_branch":"master","last_synced_at":"2025-01-17T20:37:54.879Z","etag":null,"topics":["database","geospatial","in-memory","json","nosql","raft"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tidwall.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-10-11T19:41:51.000Z","updated_at":"2025-01-10T11:18:41.000Z","dependencies_parsed_at":"2022-08-02T15:30:54.194Z","dependency_job_id":null,"html_url":"https://github.com/tidwall/summitdb","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/tidwall/summitdb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tidwall%2Fsummitdb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tidwall%2Fsummitdb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tidwall%2Fsummitdb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tidwall%2Fsummitdb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tidwall","download_url":"https://codeload.github.com/tidwall/summitdb/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tidwall%2Fsummitdb/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":277218764,"owners_count":25781444,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-27T02:00:08.978Z","response_time":73,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["database","geospatial","in-memory","json","nosql","raft"],"created_at":"2024-08-01T00:00:35.204Z","updated_at":"2025-09-27T10:30:50.394Z","avatar_url":"https://github.com/tidwall.png","language":"Go","readme":"\u003cp align=\"center\"\u003e\r\n\u003cimg \r\n    src=\"resources/logo.png\" \r\n    width=\"350\" border=\"0\" alt=\"SummitDB\"\u003e\r\n\u003c/p\u003e\r\n\r\nSummitDB is an in-memory, [NoSQL](https://en.wikipedia.org/wiki/NoSQL) key/value database. It persists to disk, uses the [Raft](https://raft.github.io/) consensus algorithm, is [ACID](https://en.wikipedia.org/wiki/ACID) compliant, and built on a transactional and strongly-consistent model. It supports [custom indexes](https://github.com/tidwall/summitdb/wiki/SETINDEX), [geospatial data](https://github.com/tidwall/summitdb/wiki/SETINDEX#spatial), [JSON documents](#json-documents), and [user-defined JS scripting](https://github.com/tidwall/summitdb/wiki/EVAL).\r\n\r\nUnder the hood it utilizes [Finn](https://github.com/tidwall/finn), [Redcon](https://github.com/tidwall/redcon), [BuntDB](https://github.com/tidwall/buntdb), [GJSON](https://github.com/tidwall/gjson), and [Otto](https://github.com/robertkrimen/otto).\r\n\r\nFeatures\r\n--------\r\n- [In-memory with disk persistence](#in-memory-disk-persistence)\r\n- [Strong-consistency and durability](#consistency-and-durability)\r\n- [High-availability](#consistency-and-durability)\r\n- [Ordered key space](#differences-between-summitdb-and-redis)\r\n- [Hot backups](#hot-backups)\r\n- [Simplified Redis-style APIs](#commands)\r\n- [Indexing on values](https://github.com/tidwall/summitdb/wiki/SETINDEX)\r\n- [JSON documents](#json-documents)\r\n- [Spatial indexing](https://github.com/tidwall/summitdb/wiki/SETINDEX#spatial)\r\n- [Fencing tokens](#fencing-tokens)\r\n\r\nGetting started\r\n---------------\r\n\r\n### Getting SummitDB\r\n\r\nThe easiest way to get SummitDB is to use one of the pre-built release binaries which are available for OSX, Linux, and Windows. \r\nInstructions for using these binaries are on the GitHub [releases page](https://github.com/tidwall/summitdb/releases).\r\n\r\nIf you want to try the latest version, you can build SummitDB from the master branch.\r\n\r\n### Building SummitDB\r\n\r\nSummitDB can be compiled and used on Linux, OSX, Windows, FreeBSD, ARM (Raspberry PI) and probably others since the codebase is 100% Go. We support both 32 bit and 64 bit systems. Go must be installed on the build machine.\r\n\r\nTo build simply:\r\n\r\n```\r\n$ make\r\n```\r\n\r\nIt's a good idea to install the [redis-cli](http://redis.io/topics/rediscli).\r\n\r\n```\r\n$ make redis-cli\r\n```\r\n\r\nTo run tests:\r\n\r\n```\r\n$ make test\r\n```\r\n\r\n## Docker\r\n\r\nCheck out the SummitDB images in [Docker Hub](https://hub.docker.com/search?q=summitdb\u0026type=image).\r\n\r\n### Running\r\n\r\nFirst start a single-member cluster:\r\n```\r\n$ ./summitdb-server\r\n```\r\n\r\nThis will start the server listening on port 7481 for client and server-to-server communication.\r\n\r\nNext, let's set a single key, and then retrieve it:\r\n\r\n```\r\n$ ./redis-cli -p 7481 SET mykey \"my value\"\r\nOK\r\n$ ./redis-cli -p 7481 GET mykey\r\n\"my value\"\r\n```\r\n\r\nAdding members:\r\n```\r\n$ ./summitdb-server -p 7482 -dir data2 -join localhost:7481\r\n$ ./summitdb-server -p 7483 -dir data3 -join localhost:7481\r\n```\r\n\r\nThat's it. Now if node1 goes down, node2 and node3 will continue to operate.\r\n\r\n## Differences between SummitDB and Redis\r\n\r\nIt may be worth noting that while SummitDB supports many Redis features, it is not a strict Redis clone. Redis has a lot of commands and data types that are not available in SummitDB such as Sets, Hashes, Sorted Sets, and PubSub. SummitDB also has many features that are not available in Redis such as:\r\n\r\n- **Ordered key space** - SummitDB provides one key space that is a large B-tree. An ordered key space allows for stable paging through keys using the [KEYS](https://github.com/tidwall/summitdb/wiki/KEYS) command. Redis uses an unordered dictionary structure and provides a specialized [SCAN](http://redis.io/commands/scan) command for iterating through keys.\r\n- **Everything a string** - SummitDB stores only strings which are exact binary representations of what the user stores. Redis has many [internal data types](http://redis.io/topics/data-types-intro), such as strings, hashes, floats, sets, etc. \r\n- **Raft clusters** - SummitDB uses the Raft consensus algorithm to provide high-availablity. Redis provides [Master/Slave replication](http://redis.io/topics/replication). \r\n- **Javascript** - SummitDB uses Javascript for user-defined scripts. Redis uses Lua.\r\n- **Indexes** - SummitDB provides an API for indexing the key space. Indexes allow for quickly querying and iterating on values. Redis has specialized data types like Sorted Sets and Hashes which can provide [secondary indexing](http://redis.io/topics/indexes).\r\n- **Spatial indexes** - SummitDB provides the ability to create spatial indexes. A spatial index uses an R-tree under the hood, and each index can be up to 20 dimensions. This is useful for geospatial, statistical, time, and range data. Redis has the [GEO API](http://redis.io/commands/geoadd) which allows for using storing and querying geospatial data using the [Geohashes](https://en.wikipedia.org/wiki/Geohash).\r\n- **JSON documents** - SummitDB allows for storing JSON documents and indexing fields directly. Redis has Hashes and a JSON parser via Lua.\r\n\r\n\u003ca name=\"in-memory-disk-persistence\"\u003e\u003c/a\u003e\r\n## In-memory with disk persistence\r\nSummitDB store all data in memory. Yet each writable command is appended to a file that is used to rebuild the database if the database needs to be restarted. \r\n\r\nThis is similar to [Redis AOF persistence](http://redis.io/topics/persistence).\r\n\r\n## JSON Documents\r\n\r\nSummitDB provides the commands\r\n[JSET](https://github.com/tidwall/summitdb/wiki/JSET),\r\n[JGET](https://github.com/tidwall/summitdb/wiki/JGET),\r\n[JDEL](https://github.com/tidwall/summitdb/wiki/JDEL)\r\nfor working with json documents.\r\n\r\n`JSET` and `JDEL` uses the \r\n[sjson path syntax](https://github.com/tidwall/sjson#path-syntax) \r\nand `JGET` uses the \r\n[gjson path syntax](https://github.com/tidwall/gjson#path-syntax).\r\n\r\nHere are some examples:\r\n\r\n```\r\n\u003e JSET user:101 name Tom\r\nOK\r\n\u003e JSET user:101 age 46\r\nOK\r\n\u003e GET user:101\r\n\"{\\\"age\\\":46,\\\"name\\\":\\\"Tom\\\"}\"\r\n\u003e JGET user:101 age\r\n\"46\"\r\n\u003e JSET user:101 name.first Tom\r\nOK\r\n\u003e JSET user:101 name.last Anderson\r\nOK\r\n\u003e GET user:101\r\n\"{\\\"age\\\":46,\\\"name\\\":{\\\"last\\\":\\\"Anderson\\\",\\\"first\\\":\\\"Tom\\\"}}\"\r\n\u003e JDEL user:101 name.last\r\n(integer) 1\r\n\u003e GET user:101\r\n\"{\\\"age\\\":46,\\\"name\\\":{\\\"first\\\":\\\"Tom\\\"}}\"\r\n\u003e JSET user:101 friends.0 Carol\r\nOK\r\n\u003e JSET user:101 friends.1 Andy\r\nOK\r\n\u003e JSET user:101 friends.3 Frank\r\nOK\r\n\u003e GET user:101\r\n\"{\\\"friends\\\":[\\\"Carol\\\",\\\"Andy\\\",null,\\\"Frank\\\"],\\\"age\\\":46,\\\"name\\\":{\\\"first\\\":\\\"Tom\\\"}}\"\r\n\u003e JGET user:101 friends.1\r\n\"Andy\"\r\n```\r\n\r\n## JSON Indexes\r\n\r\nIndexes can be created on individual fields inside JSON documents.\r\n\r\nFor example, let's say you have the following documents:\r\n\r\n```json\r\n{\"name\":{\"first\":\"Tom\",\"last\":\"Johnson\"},\"age\":38}\r\n{\"name\":{\"first\":\"Janet\",\"last\":\"Prichard\"},\"age\":47}\r\n{\"name\":{\"first\":\"Carol\",\"last\":\"Anderson\"},\"age\":52}\r\n{\"name\":{\"first\":\"Alan\",\"last\":\"Cooper\"},\"age\":28}\r\n```\r\n\r\nCreate an index:\r\n\r\n```\r\n\u003e SETINDEX last_name user:* JSON name.last\r\n```\r\n\r\nThen add some JSON:\r\n```\r\n\u003e SET user:1 '{\"name\":{\"first\":\"Tom\",\"last\":\"Johnson\"},\"age\":38}'\r\n\u003e SET user:2 '{\"name\":{\"first\":\"Janet\",\"last\":\"Prichard\"},\"age\":47}'\r\n\u003e SET user:3 '{\"name\":{\"first\":\"Carol\",\"last\":\"Anderson\"},\"age\":52}'\r\n\u003e SET user:4 '{\"name\":{\"first\":\"Alan\",\"last\":\"Cooper\"},\"age\":28}'\r\n```\r\n\r\nQuery with the ITER command:\r\n\r\n```\r\n\u003e ITER last_name\r\n1) \"user:3\"\r\n2) \"{\\\"name\\\":{\\\"first\\\":\\\"Carol\\\",\\\"last\\\":\\\"Anderson\\\"},\\\"age\\\":52}\"\r\n3) \"user:4\"\r\n4) \"{\\\"name\\\":{\\\"first\\\":\\\"Alan\\\",\\\"last\\\":\\\"Cooper\\\"},\\\"age\\\":28}\"\r\n5) \"user:1\"\r\n6) \"{\\\"name\\\":{\\\"first\\\":\\\"Tom\\\",\\\"last\\\":\\\"Johnson\\\"},\\\"age\\\":38}\"\r\n7) \"user:2\"\r\n8) \"{\\\"name\\\":{\\\"first\\\":\\\"Janet\\\",\\\"last\\\":\\\"Prichard\\\"},\\\"age\\\":47}\"\r\n```\r\n\r\nOr perhaps you want to index on age:\r\n\r\n```\r\n\u003e SETINDEX age user:* JSON age\r\n\u003e ITER age\r\n1) \"user:4\"\r\n2) \"{\\\"name\\\":{\\\"first\\\":\\\"Alan\\\",\\\"last\\\":\\\"Cooper\\\"},\\\"age\\\":28}\"\r\n3) \"user:1\"\r\n4) \"{\\\"name\\\":{\\\"first\\\":\\\"Tom\\\",\\\"last\\\":\\\"Johnson\\\"},\\\"age\\\":38}\"\r\n5) \"user:2\"\r\n6) \"{\\\"name\\\":{\\\"first\\\":\\\"Janet\\\",\\\"last\\\":\\\"Prichard\\\"},\\\"age\\\":47}\"\r\n7) \"user:3\"\r\n8) \"{\\\"name\\\":{\\\"first\\\":\\\"Carol\\\",\\\"last\\\":\\\"Anderson\\\"},\\\"age\\\":52}\"\r\n```\r\n\r\nIt's also possible to multi-index on two fields:\r\n\r\n```\r\n\u003e SETINDEX last_name_age user:* JSON name.last JSON age\r\n```\r\n\r\nFor full JSON indexing syntax check out the [SETINDEX](https://github.com/tidwall/summitdb/wiki/SETINDEX#json) and [ITER](https://github.com/tidwall/summitdb/wiki/ITER) commands.\r\n\r\nFencing Tokens\r\n--------------\r\nA fencing token is simply a number that increases. \r\nIt's guaranteed to be consistent across the cluster and can never be deleted or decreased. \r\nThe value is a 64-bit unsigned integer. The first FENCE call will return \"1\".\r\nThis can be useful in applications that need things like distributed locking and preventing race conditions. FENCEGET will read the token without incrementing it.\r\n\r\n```\r\n\u003e FENCE mytoken\r\n\"1\"\r\n\u003e FENCE mytoken\r\n\"2\"\r\n\u003e FENCE mytoken\r\n\"3\"\r\n\u003e FENCEGET mytoken\r\n\"3\"\r\n\u003e FENCE mytoken\r\n\"4\"\r\n```\r\n\r\n\r\n\u003ca href=\"raft-commands\"\u003e\u003c/a\u003e\r\nBuilt-in Raft Commands\r\n----------------------\r\nHere are a few commands for monitoring and managing the cluster:\r\n\r\n- **RAFTADDPEER addr**  \r\nAdds a new member to the Raft cluster\r\n- **RAFTREMOVEPEER addr**  \r\nRemoves an existing member\r\n- **RAFTPEERS**  \r\nLists known peers and their status\r\n- **RAFTLEADER**  \r\nReturns the Raft leader, if known\r\n- **RAFTSNAPSHOT**  \r\nTriggers a snapshot operation\r\n- **RAFTSTATE**  \r\nReturns the state of the node\r\n- **RAFTSTATS**  \r\nReturns information and statistics for the node and cluster\r\n\r\nConsistency and Durability\r\n--------------------------\r\n\r\nSummitDB is tuned by design for strong consistency and durability. A server shutdown, power event, or `kill -9` will not corrupt the state of the cluster or lose data. \r\n\r\nAll data persists to disk. SummitDB uses an append-only file format that stores for each command in exact order of execution. \r\nEach command consists of a one write and one fsync. This provides excellent durability.\r\n\r\n### Read Consistency\r\n\r\nThe `--consistency` param has the following options:\r\n\r\n- `low` - all nodes accept reads, small risk of [stale](http://stackoverflow.com/questions/1563319/what-is-stale-state) data\r\n- `medium` - only the leader accepts reads, itty-bitty risk of stale data during a leadership change\r\n- `high` - only the leader accepts reads, the raft log index is incremented to guarantee no stale data. **this is the default**\r\n\r\nFor example, setting the following options:\r\n\r\n```\r\n$ summitdb --consistency high\r\n```\r\n\r\nProvides the highest level of consistency. The default is **high**.\r\n\r\n\r\nLeadership Changes\r\n------------------\r\n\r\nIn a Raft cluster only the leader can apply commands. If a command is attempted on a follower you will be presented with the response:\r\n\r\n```\r\n\u003e SET x y\r\n-TRY 127.0.0.1:7481\r\n```\r\n\r\nThis means you should try the same command at the specified address.\r\n\r\n\r\nHot Backups\r\n-----------\r\n\r\nSummitDB supports hot-backing up a node. \r\nYou can retrieve and restore a snapshot of the database to a file using the [BACKUP](https://github.com/tidwall/summitdb/wiki/BACKUP) command.\r\n\r\n```\r\n\u003e BACKUP\r\nBULK REPLY OF DATA\r\n```\r\n\r\nOr using an HTTP connection like such:\r\n\r\n```\r\ncurl localhost:7481/backup -o backup.db\r\n```\r\n\r\nThe backup file format is a series of commands which are stored as [RESP Arrays](http://redis.io/topics/protocol#resp-arrays).\r\nThe command:\r\n```\r\nSET mykey 123\r\n```\r\nIs stored on disk as:\r\n```go\r\n\"*3\\r\\n$3\\r\\nSET\\r\\n$5\\r\\nmykey\\r\\n$3\\r\\n123\\r\\n\"\r\n```\r\n\r\n\r\nTo restore a system from a backup, issue each command to the leader. For example, using the `nc` command you could execute:\r\n```sh\r\n$ cat backup.db | nc localhost 7481\r\n```\r\n\r\nCommands\r\n--------\r\n\r\nBelow is the complete list of commands.\r\n\r\n**Keys and values**  \r\n[APPEND](https://github.com/tidwall/summitdb/wiki/APPEND), \r\n[BITCOUNT](https://github.com/tidwall/summitdb/wiki/BITCOUNT), \r\n[BITOP](https://github.com/tidwall/summitdb/wiki/BITOP), \r\n[BITPOS](https://github.com/tidwall/summitdb/wiki/BITPOS), \r\n[DBSIZE](https://github.com/tidwall/summitdb/wiki/DBSIZE),\r\n[DECR](https://github.com/tidwall/summitdb/wiki/DECR), \r\n[DECRBY](https://github.com/tidwall/summitdb/wiki/DECRBY), \r\n[DEL](https://github.com/tidwall/summitdb/wiki/DEL),\r\n[EXISTS](https://github.com/tidwall/summitdb/wiki/EXISTS),\r\n[EXPIRE](https://github.com/tidwall/summitdb/wiki/EXPIRE),\r\n[EXPIREAT](https://github.com/tidwall/summitdb/wiki/EXPIREAT),\r\n[FENCE](https://github.com/tidwall/summitdb/wiki/FENCE),\r\n[FENCEGET](https://github.com/tidwall/summitdb/wiki/FENCEGET),\r\n[FLUSHDB](https://github.com/tidwall/summitdb/wiki/FLUSHDB),\r\n[GET](https://github.com/tidwall/summitdb/wiki/GET), \r\n[GETBIT](https://github.com/tidwall/summitdb/wiki/GETBIT), \r\n[GETRANGE](https://github.com/tidwall/summitdb/wiki/GETRANGE), \r\n[GETSET](https://github.com/tidwall/summitdb/wiki/GETSET), \r\n[INCR](https://github.com/tidwall/summitdb/wiki/INCR), \r\n[INCRBY](https://github.com/tidwall/summitdb/wiki/INCRBY), \r\n[INCRBYFLOAT](https://github.com/tidwall/summitdb/wiki/INCRBYFLOAT), \r\n[KEYS](https://github.com/tidwall/summitdb/wiki/KEYS),\r\n[MGET](https://github.com/tidwall/summitdb/wiki/MGET), \r\n[MSET](https://github.com/tidwall/summitdb/wiki/MSET), \r\n[MSETNX](https://github.com/tidwall/summitdb/wiki/MSETNX), \r\n[PDEL](https://github.com/tidwall/summitdb/wiki/PDEL),\r\n[PERSIST](https://github.com/tidwall/summitdb/wiki/PERSIST),\r\n[PEXPIRE](https://github.com/tidwall/summitdb/wiki/PEXPIRE),\r\n[PEXPIREAT](https://github.com/tidwall/summitdb/wiki/PEXPIREAT),\r\n[PTTL](https://github.com/tidwall/summitdb/wiki/PTTL),\r\n[RENAME](https://github.com/tidwall/summitdb/wiki/RENAME),\r\n[RENAMENX](https://github.com/tidwall/summitdb/wiki/RENAMENX),\r\n[SET](https://github.com/tidwall/summitdb/wiki/SET), \r\n[SETBIT](https://github.com/tidwall/summitdb/wiki/SETBIT), \r\n[SETRANGE](https://github.com/tidwall/summitdb/wiki/SETRANGE), \r\n[STRLEN](https://github.com/tidwall/summitdb/wiki/STRLEN),\r\n[TTL](https://github.com/tidwall/summitdb/wiki/TTL)\r\n\r\n**JSON**\r\n[JSET](https://github.com/tidwall/summitdb/wiki/JSET),\r\n[JGET](https://github.com/tidwall/summitdb/wiki/JGET),\r\n[JDEL](https://github.com/tidwall/summitdb/wiki/JDEL)\r\n\r\n**Indexes and iteration**  \r\n[DELINDEX](https://github.com/tidwall/summitdb/wiki/DELINDEX),\r\n[INDEXES](https://github.com/tidwall/summitdb/wiki/INDEXES),\r\n[ITER](https://github.com/tidwall/summitdb/wiki/ITER),\r\n[RECT](https://github.com/tidwall/summitdb/wiki/RECT),\r\n[SETINDEX](https://github.com/tidwall/summitdb/wiki/SETINDEX)\r\n\r\n**Transactions**  \r\n[MULTI](https://github.com/tidwall/summitdb/wiki/MULTI),\r\n[EXEC](https://github.com/tidwall/summitdb/wiki/EXEC),\r\n[DISCARD](https://github.com/tidwall/summitdb/wiki/DISCARD)\r\n\r\n**Scripts**  \r\n[EVAL](https://github.com/tidwall/summitdb/wiki/EVAL),\r\n[EVALRO](https://github.com/tidwall/summitdb/wiki/EVALRO),\r\n[EVALSHA](https://github.com/tidwall/summitdb/wiki/EVALSHA),\r\n[EVALSHARO](https://github.com/tidwall/summitdb/wiki/EVALSHARO),\r\n[SCRIPT LOAD](https://github.com/tidwall/summitdb/wiki/SCRIPT-LOAD),\r\n[SCRIPT FLUSH](https://github.com/tidwall/summitdb/wiki/SCRIPT-FLUSH)\r\n\r\n**Raft management**  \r\n[RAFTADDPEER](https://github.com/tidwall/summitdb/wiki/RAFTADDPEER),\r\n[RAFTREMOVEPEER](https://github.com/tidwall/summitdb/wiki/RAFTREMOVEPEER),\r\n[RAFTLEADER](https://github.com/tidwall/summitdb/wiki/RAFTLEADER),\r\n[RAFTSNAPSHOT](https://github.com/tidwall/summitdb/wiki/RAFTSNAPSHOT),\r\n[RAFTSTATE](https://github.com/tidwall/summitdb/wiki/RAFTSTATE),\r\n[RAFTSTATS](https://github.com/tidwall/summitdb/wiki/RAFTSTATS)\r\n\r\n**Server**  \r\n[BACKUP](https://github.com/tidwall/summitdb/wiki/BACKUP)\r\n\r\n## Contact\r\nJosh Baker [@tidwall](http://twitter.com/tidwall)\r\n\r\n## License\r\n\r\nSummitDB source code is available under the MIT [License](/LICENSE).\r\n\r\n\r\n\r\n","funding_links":[],"categories":["Databases","Go","Key-value Data Model"],"sub_categories":["Key-Value Databases"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftidwall%2Fsummitdb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftidwall%2Fsummitdb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftidwall%2Fsummitdb/lists"}