{"id":15035424,"url":"https://github.com/sopherapps/go-scdb","last_synced_at":"2025-04-10T00:23:39.754Z","repository":{"id":62867827,"uuid":"560188822","full_name":"sopherapps/go-scdb","owner":"sopherapps","description":"A very simple and fast key-value pure-go store but persisting data to disk, with a \"localStorage-like\" API.","archived":false,"fork":false,"pushed_at":"2023-03-06T20:14:38.000Z","size":293,"stargazers_count":9,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-24T02:07:04.245Z","etag":null,"topics":["diskcache","golang","key-value-store","localstorage"],"latest_commit_sha":null,"homepage":"https://pkg.go.dev/github.com/sopherapps/go-scdb/scdb","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/sopherapps.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"docs/CONTRIBUTING.md","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-10-31T23:32:27.000Z","updated_at":"2025-01-03T18:31:59.000Z","dependencies_parsed_at":"2025-02-16T03:42:35.143Z","dependency_job_id":null,"html_url":"https://github.com/sopherapps/go-scdb","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sopherapps%2Fgo-scdb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sopherapps%2Fgo-scdb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sopherapps%2Fgo-scdb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sopherapps%2Fgo-scdb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sopherapps","download_url":"https://codeload.github.com/sopherapps/go-scdb/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248132396,"owners_count":21053030,"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","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":["diskcache","golang","key-value-store","localstorage"],"created_at":"2024-09-24T20:28:37.820Z","updated_at":"2025-04-10T00:23:39.725Z","avatar_url":"https://github.com/sopherapps.png","language":"Go","funding_links":["https://www.buymeacoffee.com/martinahinJ"],"categories":[],"sub_categories":[],"readme":"# go-scdb\n\n![CI](https://github.com/sopherapps/go-scdb/actions/workflows/ci.yml/badge.svg)\n\nA very simple and fast key-value pure-go store but persisting data to disk, with a \"localStorage-like\" API.\n\nThis is the pure-golang version of the original [scdb](https://github.com/sopherapps/scdb)\n\n**scdb may not be production-ready yet. It works, quite well but it requires more rigorous testing.**\n\n## Purpose\n\nComing from front-end web\ndevelopment, [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) was always a\nconvenient way of quickly persisting data to be used later by a given application even after a restart. Its API was\nextremely simple i.e. `localStorage.getItem()`, `localStorage.setItem()`, `localStorage.removeItem()`\n, `localStorage.clear()`.\n\nComing to the backend (or even desktop) development, such an embedded persistent data store with a simple API was hard\nto come by.\n\nscdb is meant to be like the 'localStorage' of backend and desktop (and possibly mobile) systems. Of course to make it a\nlittle more appealing, it has some extra features like:\n\n- Time-to-live (TTL) where a key-value pair expires after a given time\n- Non-blocking reads from separate processes, and threads.\n- Fast Sequential writes to the store, queueing any writes from multiple processes and threads.\n- Optional searching of keys that begin with a given subsequence. This option is turned on when `scdb.New()` is called.\n  Note: **`Delete`, `Set`, `Clear`, `Compact` are considerably slower when searching is enabled.**\n\n## Dependencies\n\n- golang +v1.18\n\n## Quick Start\n\n- Ensure you have golang +v1.18 installed. You can check the [official instructions](https://go.dev/doc/install) for how\n  to do that.\n\n- Initialize a new go modules project\n\n```shell\nmkdir example-go-scdb\ncd example-go-scdb\ngo mod init github.com/\u003cyour-username\u003e/example-go-scdb\n```\n\n- Install the package\n\n```shell\ngo get github.com/sopherapps/go-scdb/scdb\n```\n\n- Create a main.go file\n\n```shell\ntouch main.go\n```\n\n- Add the following code to the main.go file\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"github.com/sopherapps/go-scdb/scdb\"\n\t\"log\"\n)\n\nfunc main() {\n\trecords := map[string][]byte{\n\t\t\"hey\":      []byte(\"English\"),\n\t\t\"hi\":       []byte(\"English\"),\n\t\t\"salut\":    []byte(\"French\"),\n\t\t\"bonjour\":  []byte(\"French\"),\n\t\t\"hola\":     []byte(\"Spanish\"),\n\t\t\"oi\":       []byte(\"Portuguese\"),\n\t\t\"mulimuta\": []byte(\"Runyoro\"),\n\t}\n\n\tvar maxKeys uint64 = 1_000_000\n\tvar redundantBlocks uint16 = 1\n\tvar poolCapacity uint64 = 10\n\tvar compactionInterval uint32 = 1_800\n\n\tstore, err := scdb.New(\n\t\t\"db\",\n\t\t\u0026maxKeys,\n\t\t\u0026redundantBlocks,\n\t\t\u0026poolCapacity,\n\t\t\u0026compactionInterval,\n\t\ttrue)\n\tif err != nil {\n\t\tlog.Fatalf(\"error opening store: %s\", err)\n\t}\n\tdefer func() {\n\t\t_ = store.Close()\n\t}()\n\n\t// inserting without ttl\n\tfor k, v := range records {\n\t\terr := store.Set([]byte(k), v, nil)\n\t\tif err != nil {\n\t\t\tlog.Fatalf(\"error inserting without ttl: %s\", err)\n\t\t}\n\t}\n\n\t// inserting with ttl of 5 seconds\n\tvar ttl uint64 = 5\n\tfor k, v := range records {\n\t\terr := store.Set([]byte(k), v, \u0026ttl)\n\t\tif err != nil {\n\t\t\tlog.Fatalf(\"error inserting with ttl: %s\", err)\n\t\t}\n\t}\n\n\t// updating - just set them again\n\tupdates := map[string][]byte{\n\t\t\"hey\":      []byte(\"Jane\"),\n\t\t\"hi\":       []byte(\"John\"),\n\t\t\"hola\":     []byte(\"Santos\"),\n\t\t\"oi\":       []byte(\"Ronaldo\"),\n\t\t\"mulimuta\": []byte(\"Aliguma\"),\n\t}\n\tfor k, v := range updates {\n\t\terr := store.Set([]byte(k), v, nil)\n\t\tif err != nil {\n\t\t\tlog.Fatalf(\"error updating: %s\", err)\n\t\t}\n\t}\n\n\t// getting\n\tfor k := range records {\n\t\tvalue, err := store.Get([]byte(k))\n\t\tif err != nil {\n\t\t\tlog.Fatalf(\"error getting: %s\", err)\n\t\t}\n\n\t\tfmt.Printf(\"Key: %s, Value: %s\", k, value)\n\t}\n\n\t// searching: without pagination\n\tkvs, err := store.Search([]byte(\"h\"), 0, 0)\n\tif err != nil {\n\t\tlog.Fatalf(\"error searching 'h': %s\", err)\n\t}\n\tfmt.Printf(\"\\nno pagination: %v\", kvs)\n\n\t// searching with pagination: get last two\n\tkvs, err = store.Search([]byte(\"h\"), 2, 2)\n\tif err != nil {\n\t\tlog.Fatalf(\"error searching (paginated) 'h': %s\", err)\n\t}\n\tfmt.Printf(\"\\nskip 2, limit 2: %v\", kvs)\n\n\t// deleting\n\tfor k := range records {\n\t\terr := store.Delete([]byte(k))\n\t\tif err != nil {\n\t\t\tlog.Fatalf(\"error deleting: %s\", err)\n\t\t}\n\t}\n\n\t// clearing\n\terr = store.Clear()\n\tif err != nil {\n\t\tlog.Fatalf(\"error clearing: %s\", err)\n\t}\n\n\t// compacting (Use sparingly, say if database file is too big)\n\terr = store.Compact()\n\tif err != nil {\n\t\tlog.Fatalf(\"error compacting: %s\", err)\n\t}\n}\n```\n\n- Run the module\n\n```shell\ngo run main.go \n```\n\n## Contributing\n\nContributions are welcome. The docs have to maintained, the code has to be made cleaner, more idiomatic and faster, and\nthere might be need for someone else to take over this repo in case I move on to other things. It happens!\n\nPlease look at the [CONTRIBUTIONS GUIDELINES](./docs/CONTRIBUTING.md)\n\nYou can also look in the [./docs](https://github.com/sopherapps/scdb/tree/master/docs)\nfolder of the [rust scdb](https://github.com/sopherapps/scdb) to get up to speed with the internals of scdb e.g.\n\n- [database file format](https://github.com/sopherapps/scdb/tree/master/docs/DB_FILE_FORMAT.md)\n- [how it works](https://github.com/sopherapps/scdb/tree/master/docs/HOW_IT_WORKS.md)\n- [inverted index file format](https://github.com/sopherapps/scdb/tree/master/docs/INVERTED_INDEX_FILE_FORMAT.md)\n- [how the search works](https://github.com/sopherapps/scdb/tree/master/docs/HOW_INVERTED_INDEX_WORKS.md)\n\n## Bindings\n\nscdb is meant to be used in multiple languages of choice. However, the bindings for most of them are yet to be\ndeveloped.\n\nFor other programming languages, see the\nmain [README](https://github.com/sopherapps/scdb/tree/master/README.md#bindings)\n\n### How to Test\n\n- Ensure you have golang +v1.18 installed. You can check the [official instructions](https://go.dev/doc/install) for how\n  to do that.\n- Clone this repo and enter its root folder\n\n```shell\ngit clone https://github.com/sopherapps/go-scdb.git \u0026\u0026 cd go-scdb\n```\n\n- Install dependencies\n\n```shell\ngo mod tidy\n```\n\n- Run the tests command\n\n```shell\ngo test ./... -timeout 30s -race\n```\n\n- Run benchmarks\n\n```shell\ngo test -bench=. ./scdb -run=^#\n```\n\n## Benchmarks\n\nOn a average PC\n\n``` \ncpu: Intel(R) Core(TM) i7-4870HQ CPU @ 2.50GHz\nBenchmarkStore_Clear/Clear-8                       44492             26389 ns/op\nBenchmarkStore_ClearWithSearch/ClearWithSearch-8                   17625             79099 ns/op\nBenchmarkStore_ClearWithTTL/Clear_with_ttl:_3600-8                 40906             29675 ns/op\nBenchmarkStore_ClearWithTTLAndSearch/ClearWithTTLAndSearch:_3600-8                 17416             69369 ns/op\nBenchmarkStore_Compact/Compact-8                                                      48          26330864 ns/op\nBenchmarkStore_CompactWithSearch/CompactWithSearch-8                                  50          24116051 ns/op\nBenchmarkStore_Delete/Delete_key_hey-8                                            531001              2348 ns/op\nBenchmarkStore_Delete/Delete_key_hi-8                                             281532              4377 ns/op\nBenchmarkStore_Delete/Delete_key_salut-8                                          253088              4677 ns/op\nBenchmarkStore_Delete/Delete_key_bonjour-8                                        252166              4530 ns/op\nBenchmarkStore_Delete/Delete_key_hola-8                                           261540              4618 ns/op\nBenchmarkStore_Delete/Delete_key_oi-8                                             258252              4607 ns/op\nBenchmarkStore_Delete/Delete_key_mulimuta-8                                       253100              4650 ns/op\nBenchmarkStore_DeleteWithTTL/DeleteWithTTL_hey-8                                  490236              2334 ns/op\nBenchmarkStore_DeleteWithTTL/DeleteWithTTL_hi-8                                   517951              4609 ns/op\nBenchmarkStore_DeleteWithTTL/DeleteWithTTL_salut-8                                253389              4791 ns/op\nBenchmarkStore_DeleteWithTTL/DeleteWithTTL_bonjour-8                              264606              4694 ns/op\nBenchmarkStore_DeleteWithTTL/DeleteWithTTL_hola-8                                 277142              4348 ns/op\nBenchmarkStore_DeleteWithTTL/DeleteWithTTL_oi-8                                   278862              4269 ns/op\nBenchmarkStore_DeleteWithTTL/DeleteWithTTL_mulimuta-8                             272217              4176 ns/op\nBenchmarkStore_DeleteWithSearch/DeleteWithSearch_hey-8                            491594              2088 ns/op\nBenchmarkStore_DeleteWithSearch/DeleteWithSearch_hi-8                             575847              4276 ns/op\nBenchmarkStore_DeleteWithSearch/DeleteWithSearch_salut-8                          199257              5350 ns/op\nBenchmarkStore_DeleteWithSearch/DeleteWithSearch_bonjour-8                        263126              4703 ns/op\nBenchmarkStore_DeleteWithSearch/DeleteWithSearch_hola-8                           242805              4708 ns/op\nBenchmarkStore_DeleteWithSearch/DeleteWithSearch_oi-8                             238066              5011 ns/op\nBenchmarkStore_DeleteWithSearch/DeleteWithSearch_mulimuta-8                       241566              4616 ns/op\nBenchmarkStore_DeleteWithTTLAndSearch/DeleteWithTTLAndSearchh_hey-8               507474              2225 ns/op\nBenchmarkStore_DeleteWithTTLAndSearch/DeleteWithTTLAndSearchh_hi-8                498913              2894 ns/op\nBenchmarkStore_DeleteWithTTLAndSearch/DeleteWithTTLAndSearchh_salut-8             196436              6546 ns/op\nBenchmarkStore_DeleteWithTTLAndSearch/DeleteWithTTLAndSearchh_bonjour-8           258450              4525 ns/op\nBenchmarkStore_DeleteWithTTLAndSearch/DeleteWithTTLAndSearchh_hola-8              268400              4410 ns/op\nBenchmarkStore_DeleteWithTTLAndSearch/DeleteWithTTLAndSearchh_oi-8                265454              4663 ns/op\nBenchmarkStore_DeleteWithTTLAndSearch/DeleteWithTTLAndSearchh_mulimuta-8          222576              5542 ns/op\nBenchmarkStore_Get/Get_hey-8                                                     5862396               176.0 ns/op\nBenchmarkStore_Get/Get_hi-8                                                      6947508               190.7 ns/op\nBenchmarkStore_Get/Get_salut-8                                                   6504044               178.1 ns/op\nBenchmarkStore_Get/Get_bonjour-8                                                 6779437               197.9 ns/op\nBenchmarkStore_Get/Get_hola-8                                                    6746191               169.1 ns/op\nBenchmarkStore_Get/Get_oi-8                                                      7118454               168.1 ns/op\nBenchmarkStore_Get/Get_mulimuta-8                                                6582776               175.6 ns/op\nBenchmarkStore_GetWithTtl/GetWithTTL_hey-8                                       4462608               266.7 ns/op\nBenchmarkStore_GetWithTtl/GetWithTTL_hi-8                                        4422298               265.1 ns/op\nBenchmarkStore_GetWithTtl/GetWithTTL_salut-8                                     4352011               257.2 ns/op\nBenchmarkStore_GetWithTtl/GetWithTTL_bonjour-8                                   4607902               256.0 ns/op\nBenchmarkStore_GetWithTtl/GetWithTTL_hola-8                                      4616398               250.1 ns/op\nBenchmarkStore_GetWithTtl/GetWithTTL_oi-8                                        4739011               253.0 ns/op\nBenchmarkStore_GetWithTtl/GetWithTTL_mulimuta-8                                  4577208               285.3 ns/op\nBenchmarkStore_GetWithSearch/GetWithSearch_hey-8                                 6936900               170.9 ns/op\nBenchmarkStore_GetWithSearch/GetWithSearch_hi-8                                  6987890               192.4 ns/op\nBenchmarkStore_GetWithSearch/GetWithSearch_salut-8                               5693048               187.9 ns/op\nBenchmarkStore_GetWithSearch/GetWithSearch_bonjour-8                             6073545               189.5 ns/op\nBenchmarkStore_GetWithSearch/GetWithSearch_hola-8                                7124277               191.0 ns/op\nBenchmarkStore_GetWithSearch/GetWithSearch_oi-8                                  6097592               190.6 ns/op\nBenchmarkStore_GetWithSearch/GetWithSearch_mulimuta-8                            6402308               184.8 ns/op\nBenchmarkStore_GetWithTTLAndSearch/GetWithTTLAndSearch_hey-8                     4462237               266.8 ns/op\nBenchmarkStore_GetWithTTLAndSearch/GetWithTTLAndSearch_hi-8                      4289282               256.6 ns/op\nBenchmarkStore_GetWithTTLAndSearch/GetWithTTLAndSearch_salut-8                   4569208               280.5 ns/op\nBenchmarkStore_GetWithTTLAndSearch/GetWithTTLAndSearch_bonjour-8                 4394884               280.5 ns/op\nBenchmarkStore_GetWithTTLAndSearch/GetWithTTLAndSearch_hola-8                    4255833               285.5 ns/op\nBenchmarkStore_GetWithTTLAndSearch/GetWithTTLAndSearch_oi-8                      4361965               269.2 ns/op\nBenchmarkStore_GetWithTTLAndSearch/GetWithTTLAndSearch_mulimuta-8                4150986               269.8 ns/op\nBenchmarkStore_SearchWithoutPagination/Search_(no_pagination)_f-8                  72859             16477 ns/op\nBenchmarkStore_SearchWithoutPagination/Search_(no_pagination)_fo-8                 74356             14790 ns/op\nBenchmarkStore_SearchWithoutPagination/Search_(no_pagination)_foo-8               110252             11103 ns/op\nBenchmarkStore_SearchWithoutPagination/Search_(no_pagination)_for-8               158568              7403 ns/op\nBenchmarkStore_SearchWithoutPagination/Search_(no_pagination)_b-8                 106458             11226 ns/op\nBenchmarkStore_SearchWithoutPagination/Search_(no_pagination)_ba-8                108511             11362 ns/op\nBenchmarkStore_SearchWithoutPagination/Search_(no_pagination)_bar-8               159764              6863 ns/op\nBenchmarkStore_SearchWithoutPagination/Search_(no_pagination)_ban-8               166546              6977 ns/op\nBenchmarkStore_SearchWithoutPagination/Search_(no_pagination)_pigg-8              241080              5049 ns/op\nBenchmarkStore_SearchWithoutPagination/Search_(no_pagination)_p-8                 164688              6837 ns/op\nBenchmarkStore_SearchWithoutPagination/Search_(no_pagination)_pi-8                170878              6839 ns/op\nBenchmarkStore_SearchWithoutPagination/Search_(no_pagination)_pig-8               171812              6744 ns/op\nBenchmarkStore_SearchWithPagination/Search_(paginated)_f-8                         93435             14183 ns/op\nBenchmarkStore_SearchWithPagination/Search_(paginated)_fo-8                        64582             15807 ns/op\nBenchmarkStore_SearchWithPagination/Search_(paginated)_foo-8                      117596              9124 ns/op\nBenchmarkStore_SearchWithPagination/Search_(paginated)_for-8                      251922              5399 ns/op\nBenchmarkStore_SearchWithPagination/Search_(paginated)_b-8                        129148              9753 ns/op\nBenchmarkStore_SearchWithPagination/Search_(paginated)_ba-8                       136021             10687 ns/op\nBenchmarkStore_SearchWithPagination/Search_(paginated)_bar-8                      240330              5207 ns/op\nBenchmarkStore_SearchWithPagination/Search_(paginated)_ban-8                      214779              5375 ns/op\nBenchmarkStore_SearchWithPagination/Search_(paginated)_pigg-8                     223549              5274 ns/op\nBenchmarkStore_SearchWithPagination/Search_(paginated)_p-8                        249134              5487 ns/op\nBenchmarkStore_SearchWithPagination/Search_(paginated)_pi-8                       222294              5169 ns/op\nBenchmarkStore_SearchWithPagination/Search_(paginated)_pig-8                      248499              5291 ns/op\nBenchmarkStore_Set/Set_hey_English-8                                              256216              7841 ns/op\nBenchmarkStore_Set/Set_hi_English-8                                               174416              7295 ns/op\nBenchmarkStore_Set/Set_salut_French-8                                             155991              7452 ns/op\nBenchmarkStore_Set/Set_bonjour_French-8                                           172024              7358 ns/op\nBenchmarkStore_Set/Set_hola_Spanish-8                                             173121              7262 ns/op\nBenchmarkStore_Set/Set_oi_Portuguese-8                                            153562              7789 ns/op\nBenchmarkStore_Set/Set_mulimuta_Runyoro-8                                         160923              7392 ns/op\nBenchmarkStore_SetWithTTL/SetWithTTL_hey_English-8                                245534              6131 ns/op\nBenchmarkStore_SetWithTTL/SetWithTTL_hi_English-8                                 168194              8055 ns/op\nBenchmarkStore_SetWithTTL/SetWithTTL_salut_French-8                               142149              7559 ns/op\nBenchmarkStore_SetWithTTL/SetWithTTL_bonjour_French-8                             150925              7472 ns/op\nBenchmarkStore_SetWithTTL/SetWithTTL_hola_Spanish-8                               164697              7438 ns/op\nBenchmarkStore_SetWithTTL/SetWithTTL_oi_Portuguese-8                              171195              7579 ns/op\nBenchmarkStore_SetWithTTL/SetWithTTL_mulimuta_Runyoro-8                           168396              6879 ns/op\nBenchmarkStore_SetWithSearch/SetWithSearch_hey_English-8                           53628             25591 ns/op\nBenchmarkStore_SetWithSearch/SetWithSearch_hi_English-8                            39859             30283 ns/op\nBenchmarkStore_SetWithSearch/SetWithSearch_salut_French-8                          35337             34117 ns/op\nBenchmarkStore_SetWithSearch/SetWithSearch_bonjour_French-8                        35120             33453 ns/op\nBenchmarkStore_SetWithSearch/SetWithSearch_hola_Spanish-8                          33634             37380 ns/op\nBenchmarkStore_SetWithSearch/SetWithSearch_oi_Portuguese-8                         45607             24459 ns/op\nBenchmarkStore_SetWithSearch/SetWithSearch_mulimuta_Runyoro-8                      37992             35116 ns/op\nBenchmarkStore_SetWithTTLAndSearch/SetWithTTLAndSearch_hey_English-8               47523             26086 ns/op\nBenchmarkStore_SetWithTTLAndSearch/SetWithTTLAndSearch_hi_English-8                38470             28093 ns/op\nBenchmarkStore_SetWithTTLAndSearch/SetWithTTLAndSearch_salut_French-8              38239             31343 ns/op\nBenchmarkStore_SetWithTTLAndSearch/SetWithTTLAndSearch_bonjour_French-8            36504             31324 ns/op\nBenchmarkStore_SetWithTTLAndSearch/SetWithTTLAndSearch_hola_Spanish-8              34225             35163 ns/op\nBenchmarkStore_SetWithTTLAndSearch/SetWithTTLAndSearch_oi_Portuguese-8             51085             23423 ns/op\nBenchmarkStore_SetWithTTLAndSearch/SetWithTTLAndSearch_mulimuta_Runyoro-8          38134             31272 ns/op\n```\n\n## Acknowledgements\n\n- The GopherAcademy Article\n  on [avoiding GC overhead with large heaps](https://blog.gopheracademy.com/advent-2018/avoid-gc-overhead-large-heaps/)\n  was helpful in the validation of the memory representation of buffers as byte arrays.\n\n## License\n\nLicensed under both the [MIT License](./LICENSE)\n\nCopyright (c) 2022 [Martin Ahindura](https://github.com/tinitto)\n\n## Gratitude\n\n\u003e \"This is real love - not that we loved God, but that He loved us and sent His Son as a sacrifice\n\u003e to take away our sins.\"\n\u003e\n\u003e -- 1 John 4: 10\n\nAll glory be to God.\n\n\u003ca href=\"https://www.buymeacoffee.com/martinahinJ\" target=\"_blank\"\u003e\u003cimg src=\"https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png\" alt=\"Buy Me A Coffee\" style=\"height: 60px !important;width: 217px !important;\" \u003e\u003c/a\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsopherapps%2Fgo-scdb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsopherapps%2Fgo-scdb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsopherapps%2Fgo-scdb/lists"}