{"id":34627954,"url":"https://github.com/jobala/petro","last_synced_at":"2025-12-24T16:13:16.966Z","repository":{"id":302446895,"uuid":"1010712371","full_name":"jobala/petro","owner":"jobala","description":"A simple key value storage engine","archived":false,"fork":false,"pushed_at":"2025-08-28T14:57:08.000Z","size":48,"stargazers_count":9,"open_issues_count":1,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-28T21:55:15.616Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/jobala.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-06-29T16:44:19.000Z","updated_at":"2025-08-28T14:56:55.000Z","dependencies_parsed_at":"2025-07-02T12:44:43.895Z","dependency_job_id":"46634366-a109-4497-879b-fe8a499b6b89","html_url":"https://github.com/jobala/petro","commit_stats":null,"previous_names":["jobala/petro"],"tags_count":6,"template":false,"template_full_name":null,"purl":"pkg:github/jobala/petro","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jobala%2Fpetro","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jobala%2Fpetro/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jobala%2Fpetro/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jobala%2Fpetro/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jobala","download_url":"https://codeload.github.com/jobala/petro/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jobala%2Fpetro/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28004519,"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-12-24T02:00:07.193Z","response_time":83,"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":[],"created_at":"2025-12-24T16:13:16.046Z","updated_at":"2025-12-24T16:13:16.957Z","avatar_url":"https://github.com/jobala.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# petro\n\nA simple key value storage engine\n\n## Getting Started\n\n### Installation\n\n`go get github.com/jobala/petro`\n\n### Put\n\n```go\nstore, err := index.New[string, int](\"index\", dbFile)\nok, err := store.Put(\"age\", 25)\n```\n\n### Get\n\n```go\nstore := index.New[string, int](\"index\", dbFile)\nval, err := store.Get(\"age\")\n```\n\n### Delete\n\n```go\nstore := index.New[string, int](\"index\", dbFile)\nval, err := store.Delete(\"age\")\n```\n\n### PutBatch\n\n```go\nages := map[string]int{\n    \"john\": 30,\n    \"jane\": 20,\n    \"doe\": 45\n}\n\nstore := index.New[string, int](\"index\", dbFile)\nerr := store.PutBatch(ages)\n```\n\n### GetKeyRange\n\n```go\nages := map[string]int{\n    \"john\": 30,\n    \"jane\": 20,\n    \"doe\": 45\n}\n\nstore := index.New[string, int](\"index\", dbFile)\nstore.GetKeyRange(\"doe\", \"jane\")\n```\n\n### Iterate\n\n```go\nages := map[string]int{\n    \"john\": 30,\n    \"jane\": 20,\n    \"doe\": 45\n}\n\nstore := index.New[string, int](\"index\", dbFile)\nstoreIter := store.GetIterator()\n\nfor !storeIter.IsEnd() {\n    key, val, err := storeIter.Next()\n}\n```\n\n### durability\n\ncall `store.flush()` to ensure that your data is written to disk\n\n## Design Notes\n\n- [Disk Management](https://japhethobala.com/posts/technical/db-disk-mgmt)\n- [Bufferpool Management](https://japhethobala.com/posts/technical/db-buffer-mgmt/)\n\n## Roadmap\n\n- [x] Disk Management\n- [x] Bufferpool Management\n- [x] Index Management\n  - [x] GetValue\n  - [x] Insert\n  - [x] Iterator\n  - [ ] Delete\n  - [ ] Support duplicate keys\n- [ ] Transactions\n- [ ] Recovery\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjobala%2Fpetro","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjobala%2Fpetro","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjobala%2Fpetro/lists"}