{"id":17179258,"url":"https://github.com/bytehamster/pachash","last_synced_at":"2025-07-16T02:44:48.454Z","repository":{"id":37741164,"uuid":"438653242","full_name":"ByteHamster/PaCHash","owner":"ByteHamster","description":"Packed and Compressed Hash Tables","archived":false,"fork":false,"pushed_at":"2025-04-07T11:52:29.000Z","size":977,"stargazers_count":15,"open_issues_count":0,"forks_count":0,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-04-11T10:51:09.145Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ByteHamster.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-12-15T14:10:26.000Z","updated_at":"2025-04-07T11:52:32.000Z","dependencies_parsed_at":"2025-04-11T10:51:16.051Z","dependency_job_id":"382c42fc-cc9f-41d9-a4b0-d8af075bede9","html_url":"https://github.com/ByteHamster/PaCHash","commit_stats":null,"previous_names":[],"tags_count":2,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ByteHamster%2FPaCHash","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ByteHamster%2FPaCHash/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ByteHamster%2FPaCHash/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ByteHamster%2FPaCHash/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ByteHamster","download_url":"https://codeload.github.com/ByteHamster/PaCHash/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248750109,"owners_count":21155687,"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":[],"created_at":"2024-10-15T00:25:21.608Z","updated_at":"2025-04-13T17:11:53.749Z","avatar_url":"https://github.com/ByteHamster.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PaCHash\n\nAn object store for variable-sized objects, which has small internal-memory space usage\nand still guarantees a limited number of external IO operations.\nFor a given parameter *a*, the internal memory space usage is *2 + log(a)* bits per block.\nQueries for objects of size *|x|* take constant time and fetch *1 + |x|/B + 1/a* blocks from external memory.\n\n[\u003cimg src=\"https://raw.githubusercontent.com/ByteHamster/PaCHash/main/plots.png\" alt=\"Plots preview\"\u003e](https://arxiv.org/pdf/2205.04745)\n\n### Library usage\n\nAdd the following to your `CMakeLists.txt`.\n\n```\nadd_subdirectory(path/to/PaCHash)\ntarget_link_libraries(YourTarget PRIVATE PaCHash)\n```\n\n### Building the examples\n\n```\ngit clone --recursive git@github.com:ByteHamster/PaCHash.git\nmkdir PaCHash/build\ncd PaCHash/build\ncmake -DCMAKE_BUILD_TYPE=Release ..\nmake -j\n```\n\n### Benchmarks\n\nAlternative methods are implemented for benchmarking.\nYou can find the full benchmark scripts in an independent repository: https://github.com/ByteHamster/PaCHash-Experiments\n\n| Method            | External memory utilization | Internal memory usage | IOs per query     |\n|-------------------|-----------------------------|-----------------------|-------------------|\n| PaCHash           | 100%                        | ~6 bits/page          | 1 (variable size) |\n| Separator Hashing | Up to 98%¹                  | ~6 bits/page          | 1                 |\n| Cuckoo Hashing    | Up to 98%¹                  | Constant              | 2 parallel        |\n\n¹ Depending on the input distribution. The methods are originally designed for fixed size objects.\nAdversarial input can therefore bring the utilization down to 51% or even make construction impossible.\n\n### License\n\nThis code is licensed under the [GPLv3](/LICENSE).\nIf you use the project in an academic context or publication, please cite [our paper](https://doi.org/10.1137/1.9781611977561.ch14):\n\n```\n@inproceedings{kurpicz2023pachash,\n  author       = {Florian Kurpicz and\n                  Hans{-}Peter Lehmann and\n                  Peter Sanders},\n  title        = {PaCHash: Packed and Compressed Hash Tables},\n  booktitle    = {{ALENEX}},\n  pages        = {162--175},\n  publisher    = {{SIAM}},\n  year         = {2023},\n  doi          = {10.1137/1.9781611977561.CH14}\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbytehamster%2Fpachash","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbytehamster%2Fpachash","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbytehamster%2Fpachash/lists"}