{"id":13502959,"url":"https://github.com/naomijub/wooridb","last_synced_at":"2025-08-31T10:37:28.027Z","repository":{"id":41139697,"uuid":"332498859","full_name":"naomijub/wooridb","owner":"naomijub","description":"WooriDB is a general purpose time serial database. It is schemaless, key-value storage and uses its own query syntax that is similar to SparQL.","archived":false,"fork":false,"pushed_at":"2023-06-26T05:34:06.000Z","size":2229,"stargazers_count":136,"open_issues_count":5,"forks_count":16,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-08-03T14:52:58.679Z","etag":null,"topics":["database","schemaless","sparql","time-serial"],"latest_commit_sha":null,"homepage":"https://naomijub.github.io/wooridb/","language":"Rust","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/naomijub.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"github":null,"patreon":"naomijub","custom":["https://github.com/sponsors/naomijub","https://patreon.com/naomijub"]}},"created_at":"2021-01-24T16:33:57.000Z","updated_at":"2025-07-19T02:08:55.000Z","dependencies_parsed_at":"2024-10-26T19:31:48.135Z","dependency_job_id":"9edfd463-8c50-44ed-b656-c04800e24155","html_url":"https://github.com/naomijub/wooridb","commit_stats":{"total_commits":203,"total_committers":10,"mean_commits":20.3,"dds":0.4926108374384236,"last_synced_commit":"0c2f51afa54539f08610804a6b52a6a45df4e5b0"},"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/naomijub/wooridb","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naomijub%2Fwooridb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naomijub%2Fwooridb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naomijub%2Fwooridb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naomijub%2Fwooridb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/naomijub","download_url":"https://codeload.github.com/naomijub/wooridb/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/naomijub%2Fwooridb/sbom","scorecard":{"id":674297,"data":{"date":"2025-08-11","repo":{"name":"github.com/naomijub/wooridb","commit":"bcef59acbf1bb1509a8b3d1b2f914e45921ba026"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.6,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 1/13 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'contents' permission set to 'read': .github/workflows/rust-clippy.yml:26","Warn: no topLevel permission defined: .github/workflows/rust-clippy.yml:1","Warn: no topLevel permission defined: .github/workflows/rust.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":2,"reason":"dependency not pinned by hash detected -- score normalized to 2","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust-clippy.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/naomijub/wooridb/rust-clippy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust-clippy.yml:52: update your workflow using https://app.stepsecurity.io/secureworkflow/naomijub/wooridb/rust-clippy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:171: update your workflow using https://app.stepsecurity.io/secureworkflow/naomijub/wooridb/rust.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:179: update your workflow using https://app.stepsecurity.io/secureworkflow/naomijub/wooridb/rust.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:17: update your workflow using https://app.stepsecurity.io/secureworkflow/naomijub/wooridb/rust.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/naomijub/wooridb/rust.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:50: update your workflow using https://app.stepsecurity.io/secureworkflow/naomijub/wooridb/rust.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:113: update your workflow using https://app.stepsecurity.io/secureworkflow/naomijub/wooridb/rust.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:146: update your workflow using https://app.stepsecurity.io/secureworkflow/naomijub/wooridb/rust.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:158: update your workflow using https://app.stepsecurity.io/secureworkflow/naomijub/wooridb/rust.yml/main?enable=pin","Warn: containerImage not pinned by hash: Dockerfile:1: pin your Docker image by updating rust:latest to rust:latest@sha256:e090f7b4adf86191313dba91260351d7f5e15cac0fe34f26706a805c0cb9641f","Info:   0 out of  10 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 22 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"16 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: RUSTSEC-2021-0145 / GHSA-g98v-hv3f-hcfr","Warn: Project is vulnerable to: RUSTSEC-2024-0375","Warn: Project is vulnerable to: RUSTSEC-2022-0041 / GHSA-qc84-gqf4-9926","Warn: Project is vulnerable to: RUSTSEC-2023-0034 / GHSA-f8vr-r385-rh5r","Warn: Project is vulnerable to: RUSTSEC-2024-0003 / GHSA-8r5v-vm4m-4g25","Warn: Project is vulnerable to: RUSTSEC-2024-0332 / GHSA-q6cp-qfwq-4gcv","Warn: Project is vulnerable to: RUSTSEC-2024-0421 / GHSA-h97m-ww89-6jmq","Warn: Project is vulnerable to: RUSTSEC-2024-0384","Warn: Project is vulnerable to: RUSTSEC-2020-0016","Warn: Project is vulnerable to: GHSA-c827-hfw6-qwvm","Warn: Project is vulnerable to: RUSTSEC-2020-0056","Warn: Project is vulnerable to: RUSTSEC-2020-0071 / GHSA-wcg3-cvx6-7396","Warn: Project is vulnerable to: RUSTSEC-2021-0124 / GHSA-fg7r-2g4j-5cgr","Warn: Project is vulnerable to: RUSTSEC-2023-0005 / GHSA-4q83-7cq4-p6wg","Warn: Project is vulnerable to: GHSA-rr8g-9fpq-6wmg","Warn: Project is vulnerable to: RUSTSEC-2025-0023"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-21T21:03:14.895Z","repository_id":41139697,"created_at":"2025-08-21T21:03:14.895Z","updated_at":"2025-08-21T21:03:14.895Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272971409,"owners_count":25024093,"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-08-31T02:00:09.071Z","response_time":79,"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","schemaless","sparql","time-serial"],"created_at":"2024-07-31T22:02:31.818Z","updated_at":"2025-08-31T10:37:28.000Z","avatar_url":"https://github.com/naomijub.png","language":"Rust","funding_links":["https://patreon.com/naomijub","https://github.com/sponsors/naomijub","https://www.patreon.com/naomijub"],"categories":["Rust","Applications","应用程序 Applications"],"sub_categories":["Database","数据库 Database"],"readme":"# WooriDB\n[USER GUIDE](https://naomijub.github.io/wooridb/)\n\nWooriDB is a general purpose (**EXPERIMENTAL**) time serial database, which means it contains all entities registries indexed by DateTime. It is schemaless, key-value storage and uses its own query syntax that is similar to SparQL and Crux's Datalog. \n\n[![](https://media.giphy.com/media/FOe2EcTuBYGbG0Yc3w/giphy.gif)](https://www.patreon.com/naomijub) \u003cbr/\u003e\n[If you want me to continue improving this project: Patreon link](https://www.patreon.com/naomijub)\n\nSome other features are:\n- Hashing keys content with [`ENCRYPT`](https://github.com/naomijub/wooridb#create-entity) keyword.\n- Hashed values are filtered out and can only be checked with  [`CHECK`](https://github.com/naomijub/wooridb#checks-validity-of-of-an-encrypted-key) keyword.\n- [`Ron`](https://github.com/ron-rs/ron/blob/master/docs/grammar.md) schemas for input and output.\n  - [x] JSON is supported via feature.\n- Entities are indexed by `entity_name` (Entity Tree), `DateTime` (Time Serial) and `Uuid` (Entity ID). Entity format is a HashMap where keys are strings and values are supported [`Types`](https://github.com/naomijub/wooridb/blob/main/wql/src/lib.rs#L78).\n- Stores persistent data locally.\n- Able to handle very large numbers when using the `P` suffix.\n  - Ex: `98347883122138743294728345738925783257325789353593473247832493483478935673.9347324783249348347893567393473247832493483478935673P`.\n- Configuration is done via environment variables.\n- Authentication and Authorization via session token\n- [Conditional Update](https://naomijub.github.io/wooridb/sec-6-tx.html#match-update)\n- Some Relation Algebra\n- Entity history\n\n`Woori` means `our` and although I developed this DB initially alone, it is in my culture to call everything that is done for our community and by our community **ours**.\n\nThis project is hugely inspired by:\n- [Crux](https://github.com/juxt/crux); \n- [Datomic](https://www.datomic.com/); \n- [Prometheus](https://github.com/prometheus/prometheus) \n- [SparQL](https://en.wikipedia.org/wiki/SPARQL).\n- [Database Internals](https://www.amazon.com.br/Database-Internals-Alex-Petrov/dp/1492040347/ref=sr_1_1?__mk_pt_BR=%C3%85M%C3%85%C5%BD%C3%95%C3%91\u0026dchild=1\u0026keywords=Database+Internals%3A\u0026qid=1612831621\u0026sr=8-1)\n- [Database System Concept](https://www.amazon.com.br/dp/B073MPV4YC/ref=dp-kindle-redirect?_encoding=UTF8\u0026btkr=1)\n- [Designing Data Intensive Application](https://www.amazon.com.br/Designing-Data-Intensive-Applications-Reliable-Maintainable-ebook/dp/B06XPJML5D/ref=sr_1_1?__mk_pt_BR=%C3%85M%C3%85%C5%BD%C3%95%C3%91\u0026dchild=1\u0026keywords=Designing+Data%E2%80%93Intensive+Applications\u0026qid=1612831724\u0026s=books\u0026sr=1-1)\n- Professor [Andy Pavlo](http://www.cs.cmu.edu/~pavlo/) Database classes. \n- [Zero Trust in Time Series Data?](https://www.ockam.io/learn/blog/trust_influxdb)\n\n\n## Installation\n\nTo run WooriDB it is necessary to have Rust installed in the machine. There are two ways to do this:\n\n1. Go to rustup.rs and copy the command there, for unix it is `curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh`.\n2. Clone WooriDB and execute `make setup`.\n\n\n### Executing WooriDB\n\n- `Release mode performance`: `make release` in project root for performance optimization.\n- `Release mode size`: `make run` in project root for size optimization.\n- `Debug mode`: `make debug` in project root.\n\n### Docker\nyou can find the latest docker image at **[naomijub/wooridb](https://hub.docker.com/repository/docker/naomijubs/wooridb)**. The current most stable tag is **`beta-8`**. To execute the docker container run:\n\n* `docker run -p 1438:1438 naomijubs/wooridb:beta-8 debug` for debug mode.\n* `docker run -p 1438:1438 -e AUTH_HASHING_COST=8 -e ADMIN=your-admin-id -e ADMIN_PASSWORD=your-admin-pswd naomijubs/wooridb:beta-8 run`  for size optimization.\n* `docker run -p 1438:1438 -e AUTH_HASHING_COST=8 -e ADMIN=your-admin-id -e ADMIN_PASSWORD=your-admin-pswd naomijubs/wooridb:beta-8 release` for performance optimization.\n* All `-e/--env` can be replaced by a `--env-file path/to/your/.env`. Your `.env`file should contain the following fields:\n```\nHASHING_COST=16\nPORT=1438\nAUTH_HASHING_COST=8\nADMIN=your-admin-id\nADMIN_PASSWORD=your-admin-pswd\n``` \n\n## Usage\n* Responses are in [`RON`](https://github.com/ron-rs/ron) format. Support for `JSON` is via `--feature json` and `EDN` will be done later by using features.\n* For now only persistent local memory is used. Support for `S3`, `Postgres` and `DynamoDB` will also be done later by using features.\n* **Precise floats** or **numbers larger than f64::MAX/i128::MAX** can be defined with an UPPERCASE `P` at the end. \n  * _Note_: This type cannot be updated with `UPDATE CONTENT`. \n  * Ex.: `INSERT {a: 98347883122138743294728345738925783257325789353593473247832493483478935673.9347324783249348347893567393473247832493483478935673P, } INTO my_entity`.\n* `BLOB` will not be supported. Check out [To BLOB or Not To BLOB: Large Object Storage in a Database or a Filesystem](https://www.microsoft.com/en-us/research/publication/to-blob-or-not-to-blob-large-object-storage-in-a-database-or-a-filesystem/).\n* To configure hashing cost and port some environment variables are required:\n```\nHASHING_COST=16\nPORT=1438\n```\n\n## Milestone to stable-ish version\n- [ ] [issues](https://github.com/naomijub/wooridb/issues?q=is%3Aissue+is%3Aopen+label%3AMilestone)\n\n## Current Benchmarks\n\u003e 2,3 GHz Intel Core i9 8-Core 32 GB 2667 MHz DDR4\n\n- `create_entity`                      time:   [4.7008 ms 4.7367 ms 4.7725 ms]\n- `insert_entity`                      time:   [12.647 ms 12.977 ms 13.308 ms]\n- `update_set_entity`                  time:   [14.896 ms 15.087 ms 15.309 ms]\n- `update_content_entity`              time:   [14.871 ms 15.070 ms 15.307 ms]\n- `delete_entity`                      time:   [5.3966 ms 5.4423 ms 5.4908 ms] - Filtered 400s\n- `evict_entity_id`                    time:   [15.534 ms 15.623 ms 15.721 ms] - Filtered 400s\n- `evict_entity`                       time:   [12.318 ms 12.416 ms 12.540 ms] - Filtered 400s\n- `select_all` 20 entities             time:   [6.3402 ms 6.4743 ms 6.6356 ms]\n- `select_all` 10 entities             time:   [5.8318 ms 5.9682 ms 6.1340 ms]\n- `select_all` 1 entity                time:   [5.1030 ms 5.1379 ms 5.1738 ms]\n- `history_10_registries_for_entity`   time:   [5.4936 ms 5.5328 ms 5.5725 ms]\n- `history_20_registries_for_entity`   time:   [6.0676 ms 6.1049 ms 6.1429 ms]\n\n### WQL \n\u003e 2,3 GHz Intel Core i9 8-Core 32 GB 2667 MHz DDR4\n\n- `create_entity`           time:   [433.57 ns 435.00 ns 436.38 ns]\n- `inser_entity`            time:   [1.6349 us 1.6406 us 1.6463 us]\n- `select_all`              time:   [429.79 ns 431.05 ns 432.14 ns]\n- `select_args`             time:   [655.40 ns 657.53 ns 659.71 ns]\n\n### File approximated size\n\nFor ~10000 entries in a day, the file size will be 2.5 GB for registries (and for cached values - this may become an issue soon). After compression it can be reduced to 10% of this.\n\n### artillery.io \n\u003e 2,3 GHz Intel Core i9 8-Core 32 GB 2667 MHz DDR4\n\n[**Insert**](./insert-report.json)\n\nConfig file:\n```yml\nconfig:\n  target: \"http://localhost:1438\"\n  phases:\n    - duration: 100\n      arrivalRate: 10\n  defaults:\n    headers:\n      Content-Type: \"application/wql\"\nscenarios:\n  - flow:\n      - post:\n          url: \"/wql/tx\"\n          body: \"INSERT {name: \\\"name\\\", last_name: \\\"last name\\\", age: 20, blood: 'O'} INTO person\"\n```\n\n[**Select**](./select-report.json)\n\nContains 1000 registries of `{name: \\\"name\\\", last_name: \\\"last name\\\", age: 20, blood: 'O'}`.\n\nConfig file:\n```yml\nconfig:\n  target: \"http://localhost:1438\"\n  phases:\n    - duration: 100\n      arrivalRate: 10\n  defaults:\n    headers:\n      Content-Type: \"application/wql\"\nscenarios:\n  - flow:\n      - post:\n          url: \"/wql/query\"\n          body: \"SELECT * FROM person\"\n```            \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnaomijub%2Fwooridb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnaomijub%2Fwooridb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnaomijub%2Fwooridb/lists"}