{"id":17026303,"url":"https://github.com/st3v3nmw/impulse","last_synced_at":"2025-07-22T10:31:18.294Z","repository":{"id":65833531,"uuid":"571216833","full_name":"st3v3nmw/impulse","owner":"st3v3nmw","description":"Distributed Key Value Store in Go","archived":true,"fork":false,"pushed_at":"2025-01-25T15:23:02.000Z","size":46,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-22T19:15:35.454Z","etag":null,"topics":["distributed-key-value-database","key-value","key-value-store","keyvaluestore"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/st3v3nmw.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-27T14:42:33.000Z","updated_at":"2025-01-25T15:23:43.000Z","dependencies_parsed_at":"2024-10-14T07:31:45.687Z","dependency_job_id":"d176e5b6-4d66-4151-bc5b-a878aea300f8","html_url":"https://github.com/st3v3nmw/impulse","commit_stats":null,"previous_names":["st3v3nmw/pithered"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/st3v3nmw/impulse","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/st3v3nmw%2Fimpulse","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/st3v3nmw%2Fimpulse/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/st3v3nmw%2Fimpulse/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/st3v3nmw%2Fimpulse/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/st3v3nmw","download_url":"https://codeload.github.com/st3v3nmw/impulse/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/st3v3nmw%2Fimpulse/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266475065,"owners_count":23934875,"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-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"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":["distributed-key-value-database","key-value","key-value-store","keyvaluestore"],"created_at":"2024-10-14T07:31:40.185Z","updated_at":"2025-07-22T10:31:18.281Z","avatar_url":"https://github.com/st3v3nmw.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# impulse\n\n\u003e [!IMPORTANT]\n\u003e This repository has been archived. [crafty-key-value](https://github.com/st3v3nmw/crafty-key-value) is this repository's spiritual successor.\n\n\u003e Wer Ordnung hält, ist nur zu faul zum Suchen. \\\n\u003e (If you keep things tidily ordered, you’re just too lazy to go searching.) \\\n\u003e — German proverb, Designing Data-Intensive Applications\n\nDistributed Key-Value Store in Go\n\n## Roadmap\n\n- [x] HTTP Server API (with `fasthttp`)\n  - [x] `Put(key, value)`\n  - [x] `Get(key) -\u003e value`\n  - [x] `Delete(key)`\n- [ ] Storage Engines\n  - [x] Hash Map (with `sync.RWMutex`)\n  - [x] LevelDB\n  - [ ] LSM-Tree\n      - [ ] SSTable\n      - [ ] Bloom Filter\n  - [ ] B Tree\n- [ ] Single Leader Replication\n  - [x] Service Discovery\n  - [x] Leader Election with [Raft Consensus Protocol](https://raft.github.io/)\n  - [ ] Replication\n- [ ] Leaderless Replication (peer-to-peer coordination)\n- [ ] Chaos Testing (like Netflix's [Chaos Monkey](https://netflix.github.io/chaosmonkey/))\n- [ ] Range Queries\n- [ ] Sharding\n\n## Usage\n\n### Setup\n\nEnable the RBAC addon on microk8s and create a role binding which will grant the default service account view permissions.\n\n```\nmicrok8s kubectl create clusterrolebinding default-view-impulse --clusterrole=view --serviceaccount=impulse:default\n```\n\n## \"Benchmarks\"\n\n### scripts/concurrency_test.sh\n\n```console\n\u003e ./scripts/concurrent.sh\ngo build -o impulse ./...\n\nHASH_MAP\n========\n\nPUT\nRunning 10s test @ http://127.0.0.1:3000/foo\n  100 goroutine(s) running concurrently\n224432 requests in 9.93928912s, 12.20MB read\nRequests/sec:\t\t22580.29\nTransfer/sec:\t\t1.23MB\nAvg Req Time:\t\t4.428641ms\nFastest Request:\t120.027µs\nSlowest Request:\t33.188626ms\nNumber of Errors:\t0\n\nGET\nRunning 10s test @ http://127.0.0.1:3000/foo\n  100 goroutine(s) running concurrently\n249859 requests in 9.924716107s, 28.59MB read\nRequests/sec:\t\t25175.43\nTransfer/sec:\t\t2.88MB\nAvg Req Time:\t\t3.972126ms\nFastest Request:\t99.222µs\nSlowest Request:\t51.840697ms\nNumber of Errors:\t0\n\nDELETE\nRunning 10s test @ http://127.0.0.1:3000/foo\n  100 goroutine(s) running concurrently\n234442 requests in 9.951180146s, 12.74MB read\nRequests/sec:\t\t23559.22\nTransfer/sec:\t\t1.28MB\nAvg Req Time:\t\t4.244623ms\nFastest Request:\t112.367µs\nSlowest Request:\t33.148716ms\nNumber of Errors:\t0\n\nLEVELDB\n=======\n\nPUT\nRunning 10s test @ http://127.0.0.1:3000/foo\n  100 goroutine(s) running concurrently\n229573 requests in 9.940867386s, 12.48MB read\nRequests/sec:\t\t23093.86\nTransfer/sec:\t\t1.26MB\nAvg Req Time:\t\t4.330155ms\nFastest Request:\t112.35µs\nSlowest Request:\t37.433849ms\nNumber of Errors:\t0\n\nGET\nRunning 10s test @ http://127.0.0.1:3000/foo\n  100 goroutine(s) running concurrently\n248876 requests in 9.9313757s, 28.48MB read\nRequests/sec:\t\t25059.57\nTransfer/sec:\t\t2.87MB\nAvg Req Time:\t\t3.990491ms\nFastest Request:\t96.86µs\nSlowest Request:\t43.956081ms\nNumber of Errors:\t0\n\nDELETE\nRunning 10s test @ http://127.0.0.1:3000/foo\n  100 goroutine(s) running concurrently\n234623 requests in 9.952669339s, 12.75MB read\nRequests/sec:\t\t23573.88\nTransfer/sec:\t\t1.28MB\nAvg Req Time:\t\t4.241983ms\nFastest Request:\t110.965µs\nSlowest Request:\t31.113818ms\nNumber of Errors:\t0\n```\n\n### scripts/sequential_test.sh\n\n```console\n\u003e N=2048 ./scripts/sequential_test.sh\ngo build -o impulse ./...\n\nHASH_MAP\n========\nPUT: 104.59 requests per second\nGET (present): 96.58 requests per second\nDELETE: 104.70 requests per second\nGET (missing): 96.21 requests per second\n\nLEVELDB\n=======\nPUT: 104.58 requests per second\nGET (present): 95.94 requests per second\nDELETE: 104.30 requests per second\nGET (missing): 95.17 requests per second\n```\n\n### scripts/resilience_test.sh\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fst3v3nmw%2Fimpulse","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fst3v3nmw%2Fimpulse","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fst3v3nmw%2Fimpulse/lists"}