{"id":13591913,"url":"https://github.com/oom-ai/oomstore","last_synced_at":"2025-04-08T18:31:08.899Z","repository":{"id":43484779,"uuid":"409050166","full_name":"oom-ai/oomstore","owner":"oom-ai","description":"Lightweight and Fast Feature Store Powered by Go (and Rust).","archived":false,"fork":false,"pushed_at":"2022-02-28T08:47:29.000Z","size":3740,"stargazers_count":87,"open_issues_count":11,"forks_count":11,"subscribers_count":7,"default_branch":"main","last_synced_at":"2024-10-31T11:52:20.784Z","etag":null,"topics":["featurestore","go","ml","mlops","python","rust"],"latest_commit_sha":null,"homepage":"https://oom.ai","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oom-ai.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-09-22T03:19:00.000Z","updated_at":"2024-10-09T20:19:05.000Z","dependencies_parsed_at":"2022-08-30T09:40:56.813Z","dependency_job_id":null,"html_url":"https://github.com/oom-ai/oomstore","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oom-ai%2Foomstore","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oom-ai%2Foomstore/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oom-ai%2Foomstore/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oom-ai%2Foomstore/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oom-ai","download_url":"https://codeload.github.com/oom-ai/oomstore/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":223339248,"owners_count":17129293,"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":["featurestore","go","ml","mlops","python","rust"],"created_at":"2024-08-01T16:01:03.608Z","updated_at":"2024-11-06T12:32:17.583Z","avatar_url":"https://github.com/oom-ai.png","language":"Go","funding_links":[],"categories":["Go"],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eOomStore\u003c/h1\u003e\n\u003cp align=\"center\"\u003e\n    \u003cem\u003eLightweight and Fast Feature Store Powered by Go\u003c/em\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/oom-ai/oomstore/actions/workflows/ci.yml\"\u003e\n        \u003cimg src=\"https://github.com/oom-ai/oomstore/actions/workflows/ci.yml/badge.svg\" alt=\"CICD\"/\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://goreportcard.com/report/oom-ai/oomstore\"\u003e\n        \u003cimg src=\"https://goreportcard.com/badge/oom-ai/oomstore\" alt=\"Version\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"http://godoc.org/github.com/oom-ai/oomstore\"\u003e\n        \u003cimg src=\"https://godoc.org/github.com/oom-ai/oomstore?status.png\" alt=\"Version\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://codecov.io/gh/oom-ai/oomstore\"\u003e\n        \u003cimg src=\"https://codecov.io/gh/oom-ai/oomstore/branch/main/graph/badge.svg?token=C59L7LTRM4\" alt=\"Platform\"/\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n  \u003ca href=\"https://oom.ai/docs/quickstart\"\u003eQuickstart\u003c/a\u003e\n  \u003cspan\u003e · \u003c/span\u003e\n  \u003ca href=\"https://oom.ai/docs/architecture\"\u003eArchitecture\u003c/a\u003e\n  \u003cspan\u003e · \u003c/span\u003e\n  \u003ca href=\"https://oom.ai/docs/benchmark\"\u003eBenchmark\u003c/a\u003e\n\u003c/p\u003e\n\n## Overview\n\noomstore allows you to:\n\n- Define features with YAML.\n- Store features in databases of choice.\n- Retrieve features for both online serving and offline training, **fast**.\n\nPlease see our [docs](https://oom.ai/docs) for more details.\n\n## Features\n\n- 🍼 Simple. Being serverless and CLI-friendly, users can be productive in hours, not months.\n- 🔌 Composable. We support your preferred [databases of choice](https://oom.ai/docs/supported-databases).\n- ⚡ Fast. [Benchmark](https://oom.ai/docs/benchmark) shows oomstore performs QPS \u003e 50k and latency \u003c 0.3 ms with Redis.\n- 🌊 Streaming. We support streaming features to ensure your predictions are up-to-date.\n\n## Architecture\n\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://oom.ai/images/architecture/architecture.svg\" alt=\"Architecture\"\u003e\n\u003c/p\u003e\n\nSee [Architecture](https://oom.ai/docs/architecture) for more details.\n\n## Quickstart\n\n1. Install `oomcli` following the [guide](https://oom.ai/docs/installation#cli).\n\n2. `oomcli init` to initialize oomstore. Make sure there is a `~/.config/oomstore/config.yaml` as below.\n\n```yaml\nonline-store:\n  sqlite:\n    db-file: /tmp/oomstore.db\n\noffline-store:\n  sqlite:\n    db-file: /tmp/oomstore.db\n\nmetadata-store:\n  sqlite:\n    db-file: /tmp/oomstore.db\n```\n\n3. `oomcli apply -f metadata.yaml` to register metadata. See metadata.yaml below.\n\n```yaml\nkind: Entity\nname: user\ndescription: 'user ID'\ngroups:\n- name: account\n  category: batch\n  description: 'user account'\n  features:\n  - name: state\n    value-type: string\n  - name: credit_score\n    value-type: int64\n  - name: account_age_days\n    value-type: int64\n  - name: 2fa_installed\n    value-type: bool\n- name: txn_stats\n  category: batch\n  description: 'user txn stats'\n  features:\n  - name: count_7d\n    value-type: int64\n  - name: count_30d\n    value-type: int64\n- name: recent_txn_stats\n  category: stream\n  snapshot-interval: 24h\n  description: 'user recent txn stats'\n  features:\n  - name: count_10min\n    value-type: int64\n```\n\n4. Import CSV data to Offline Store, then sync from Offline to Online Store\n\n```bash\noomcli import \\\n  --group account \\\n  --input-file account.csv \\\n  --description 'sample account data'\noomcli import \\\n  --group txn_stats \\\n  --input-file txn_stats.csv \\\n  --description 'sample txn stats data'\noomcli sync --group-name account --revision-id 2\noomcli sync --group-name txn_stats --revision-id 4\n```\n\n5. Push stream data to both Online and Offline Store.\n\n```bash\noomcli push --group recent_txn_stats --entity-key 1006 --feature count_10min=1\n```\n\n6. Fetch features by key.\n\n```bash\noomcli get online \\\n  --entity-key 1006 \\\n  --feature account.state,account.credit_score,account.account_age_days,account.2fa_installed,txn_stats.count_7d,txn_stats.count_30d,recent_txn_stats.count_10min\n```\n\n```text\n+------+---------------+----------------------+--------------------------+-----------------------+--------------------+---------------------+------------------------------+\n| user | account.state | account.credit_score | account.account_age_days | account.2fa_installed | txn_stats.count_7d | txn_stats.count_30d | recent_txn_stats.count_10min |\n+------+---------------+----------------------+--------------------------+-----------------------+--------------------+---------------------+------------------------------+\n| 1006 | Louisiana     |                  710 |                       32 | false                 |                  8 |                  22 |                            1 |\n+------+---------------+----------------------+--------------------------+-----------------------+--------------------+---------------------+------------------------------+\n```\n\n7. Generate training datasets via Point-in-Time Join.\n\n```sh\noomcli join \\\n\t--feature account.state,account.credit_score,account.account_age_days,account.2fa_installed,txn_stats.count_7d,txn_stats.count_30d,recent_txn_stats.count_10min \\\n\t--input-file label.csv\n```\n\n```text\n+------------+---------------+---------------+----------------------+--------------------------+-----------------------+--------------------+---------------------+------------------------------+\n| entity_key |  unix_milli   | account.state | account.credit_score | account.account_age_days | account.2fa_installed | txn_stats.count_7d | txn_stats.count_30d | recent_txn_stats.count_10min |\n+------------+---------------+---------------+----------------------+--------------------------+-----------------------+--------------------+---------------------+------------------------------+\n|       1002 | 1950236233000 | Hawaii        |                  625 |                      861 | true                  |                 11 |                  36 |                              |\n|       1003 | 1950411318000 | Arkansas      |                  730 |                      958 | false                 |                  0 |                  16 |                              |\n|       1004 | 1950653614000 | Louisiana     |                  610 |                     1570 | false                 |                 12 |                  26 |                              |\n|       1005 | 1950166137000 | South Dakota  |                  635 |                     1953 | false                 |                  7 |                  30 |                              |\n|       1006 | 1950403162000 | Louisiana     |                  710 |                       32 | false                 |                  8 |                  22 |                            1 |\n|       1007 | 1950160030000 | New Mexico    |                  645 |                       37 | true                  |                  5 |                  40 |                              |\n|       1008 | 1950274859000 | Nevada        |                  735 |                     1627 | false                 |                 12 |                  51 |                              |\n|       1009 | 1949958846000 | Kentucky      |                  650 |                       88 | true                  |                 11 |                  23 |                              |\n|       1010 | 1949920686000 | Delaware      |                  680 |                     1687 | false                 |                  2 |                  39 |                              |\n+------------+---------------+---------------+----------------------+--------------------------+-----------------------+--------------------+---------------------+------------------------------+\n```\n\nSee [Quickstart](https://oom.ai/docs/quickstart) for more complete details.\n\n## Supported Databases\n\n### Online Store\n\n- Amazon DynamoDB\n- Redis\n- TiKV\n- Cassandra\n- PostgreSQL\n- MySQL\n- TiDB\n- SQLite\n\n### Offline Store\n\n- Snowflake\n- Amazon Redshift\n- Google BigQuery\n- PostgreSQL\n- MySQL\n- TiDB\n- SQLite\n\n### Metadata Store\n\n- PostgreSQL\n- MySQL\n- TiDB\n- SQLite\n\n## Community\n\nFeel free to [join the community](https://oom.ai/docs/community) for questions and feature requests!\n\n## Credits\n\noomstore is highly inspired by [Feast](https://github.com/feast-dev/feast).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foom-ai%2Foomstore","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foom-ai%2Foomstore","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foom-ai%2Foomstore/lists"}