{"id":50409572,"url":"https://github.com/walker83/rorisdb","last_synced_at":"2026-05-31T03:01:33.038Z","repository":{"id":355504294,"uuid":"1228046495","full_name":"walker83/RorisDB","owner":"walker83","description":"RorisDB is a real-time OLAP database reimagined in Rust. It is architecturally inspired by Apache Doris — adopting its proven MPP architecture, columnar storage, and materialized view design — while rebuilt from the ground up in Rust for memory safety, zero-cost abstractions, and fine-grained resource control.","archived":false,"fork":false,"pushed_at":"2026-05-25T16:34:22.000Z","size":2161,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-25T18:26:14.013Z","etag":null,"topics":["analytics","apache-doris","columnar","database","datafusion","local-development","mysql","olap","parquet","rust","single-node","sql"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/walker83.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-03T14:21:23.000Z","updated_at":"2026-05-25T16:34:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/walker83/RorisDB","commit_stats":null,"previous_names":["walker83/rorisdb"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/walker83/RorisDB","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walker83%2FRorisDB","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walker83%2FRorisDB/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walker83%2FRorisDB/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walker83%2FRorisDB/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/walker83","download_url":"https://codeload.github.com/walker83/RorisDB/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/walker83%2FRorisDB/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33717419,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-31T02:00:06.040Z","response_time":95,"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":["analytics","apache-doris","columnar","database","datafusion","local-development","mysql","olap","parquet","rust","single-node","sql"],"created_at":"2026-05-31T03:01:32.269Z","updated_at":"2026-05-31T03:01:33.026Z","avatar_url":"https://github.com/walker83.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# RorisDB\n\n### The Universal Database Chameleon\n\n**One binary. Multiple protocols. Zero infrastructure.**\n\n**✅ Multi-Database Protocol Compatible — MySQL | MaxCompute | Hologres**\n\n**✅ Alibaba Cloud Compatible — MaxCompute \u0026 Hologres**\n\n[![Apache-2.0 License](https://img.shields.io/badge/License-Apache--2.0-blue.svg)](LICENSE)\n[![Rust](https://img.shields.io/badge/Rust-2024--edition-orange.svg)](https://www.rust-lang.org)\n[![Version](https://img.shields.io/badge/Version-0.3.0-green.svg)]()\n[![Stars](https://img.shields.io/github/stars/walker83/RorisDB.svg?style=social\u0026label=Star)](https://github.com/walker83/RorisDB)\n\n[English](README.md) · [中文文档](docs/zh/README.md) · [Quick Start](#-quick-start) · [Supported Protocols](#-supported-protocols) · [Architecture](#-architecture) · [Documentation](#-documentation) · [Contributing](#-contributing)\n\n\u003c/div\u003e\n\n---\n\n## What is RorisDB?\n\nRorisDB is a **universal database simulation platform** built in Rust with Apache DataFusion. The core SQL engine is **Doris-compatible** — accepting all four Doris table model syntaxes, Doris-specific functions, and the full Doris DDL/DML grammar. On top of this foundation, RorisDB simultaneously speaks **MaxCompute (ODPS)** and **Hologres (PostgreSQL)** protocols, translating their vendor-specific syntax into the common Doris-based engine.\n\n**Multi-Database Protocol Compatible:**\n- **MySQL** — Full Doris SQL grammar, wire protocol, all table models\n- **MaxCompute (ODPS)** — Alibaba Cloud compatible with HMAC-SHA1/SHA256 authentication\n- **Hologres** — Alibaba Cloud compatible with PostgreSQL v3 wire protocol\n\n**One binary replaces your entire dependency matrix:**\n\n- Replace a Doris cluster for local development with native Doris SQL\n- Mock MaxCompute (ODPS) APIs for offline data pipeline testing\n- Simulate Hologres for real-time analytics development\n- Run any MySQL-compatible application without provisioning infrastructure\n\nNo containers. No clusters. No cloud bills. Just `./roris-fe` and go.\n\n## Key Capabilities\n\n| Capability | Description |\n|------------|-------------|\n| **Multi-Database Protocol** | MySQL, MaxCompute, Hologres — all three protocols simultaneously |\n| **Doris SQL Compatible** | Full Doris grammar: `DUPLICATE/AGGREGATE/UNIQUE/PRIMARY KEY`, `DISTRIBUTED BY HASH`, 35 Doris UDFs |\n| **Alibaba Cloud Compatible** | Full MaxCompute (ODPS) and Hologres protocol support |\n| **Multi-Protocol** | MySQL (:9030), MaxCompute (:9031), Hologres (:15432) — simultaneously on a single instance |\n| **Columnar Engine** | Apache DataFusion query engine with Parquet storage, ZSTD compression |\n| **Protocol Fidelity** | Real wire protocols — works with `mysql`, `psql`, `pyodps`, JDBC, and BI tools |\n| **SQL Translation** | MaxCompute/Hologres syntax auto-normalized into Doris-based engine |\n| **Embedded Web UI** | Browser-based SQL editor at `http://localhost:8080` with schema exploration |\n| **Single Binary** | ~100MB RAM footprint, 60-second setup, zero external dependencies |\n| **Backup \u0026 Restore** | Full database backup with manifest tracking |\n| **Audit Logging** | Async audit log with slow query tracking |\n\n## Supported Protocols\n\n### MySQL Wire Protocol — Port 9030\n\nConnect with any MySQL client, driver, ORM, or BI tool. **Full Doris SQL grammar** — the native engine accepts all four Doris table models (`DUPLICATE KEY`, `AGGREGATE KEY`, `UNIQUE KEY`, `PRIMARY KEY`), `DISTRIBUTED BY HASH`, `PARTITION BY`, Doris built-in functions, and `ON DUPLICATE KEY UPDATE`. Note: MySQL protocol currently does not enforce password authentication — any non-empty username is accepted.\n\n```bash\nmysql -h 127.0.0.1 -P 9030 -uroot\n```\n\n### MaxCompute (ODPS) REST API — Port 9031\n\n**✅ Alibaba Cloud MaxCompute Compatible** — Simulate Alibaba Cloud MaxCompute for data pipeline development. Supports HMAC-SHA1 (V2) and HMAC-SHA256 (V4) authentication, SQL job submission, instance management, and the full ODPS type system.\n\n```python\nfrom odps import ODPS\no = ODPS('roris', 'roris-secret', 'default',\n         endpoint='http://127.0.0.1:9031/api')\no.execute_sql('SELECT * FROM my_table').wait_for_success()\n```\n\n### Hologres (PostgreSQL) — Port 15432\n\n**✅ Alibaba Cloud Hologres Compatible** — Simulate Alibaba Cloud Hologres with PostgreSQL v3 wire protocol. Supports Simple Query, Extended Query (Parse/Bind/Execute), `pg_catalog` system tables, and Hologres-specific DDL (`WITH (orientation='column', ...)`, `CALL set_table_property`).\n\n```bash\npsql -h 127.0.0.1 -p 15432 -U roris -d default\n```\n\n### Protocol Comparison\n\n| Feature | MySQL | MaxCompute | Hologres |\n|---------|-------|------------|----------|\n| Wire Protocol | TCP Binary | HTTP/REST + XML | TCP (PostgreSQL v3) |\n| Authentication | Handshake (no password enforcement) | HMAC-SHA1 / HMAC-SHA256 (verified) | MD5 (verified) |\n| Default Credentials | Any username / no password | `roris` / `roris-secret` | `roris` / `roris-secret` |\n| SQL Dialect | Doris/MySQL (native) | ODPS SQL (translated) | PostgreSQL (translated) |\n| DDL Extensions | `DUPLICATE KEY`, `DISTRIBUTED BY` | `PARTITIONED BY`, `LIFECYCLE` | `WITH (orientation=...)`, `set_table_property` |\n| Clients | `mysql`, JDBC, DBeaver | `pyodps`, DataWorks SDK | `psql`, JDBC, pg-driver |\n| Status | Stable | Phase 1 complete | Phase 1 complete |\n\n## Quick Start\n\n```bash\n# Build (requires Rust 2024 edition)\ngit clone https://github.com/walker83/RorisDB.git\ncd RorisDB\ncargo build --release\n\n# Start with all protocols enabled\n./target/release/roris-fe --mysql-port 9030 --maxcompute-port 9031 --hologres-port 15432\n```\n\n### Doris SQL Example (MySQL Protocol)\n\n```bash\nmysql -h 127.0.0.1 -P 9030 -uroot\n```\n\n```sql\nCREATE DATABASE analytics;\nUSE analytics;\n\n-- Doris Duplicate Key model with distribution\nCREATE TABLE events (\n    event_id INT,\n    user_id INT,\n    event_type VARCHAR(50),\n    amount DECIMAL(10,2),\n    occurred_at DATETIME\n) DUPLICATE KEY(event_id)\nDISTRIBUTED BY HASH(event_id) BUCKETS 1;\n\n-- Doris Aggregate Key model (syntax accepted, modifiers stored as metadata)\nCREATE TABLE daily_stats (\n    stat_date DATE,\n    channel VARCHAR(50),\n    pv BIGINT SUM,\n    uv BIGINT SUM,\n    amount DECIMAL(10,2) SUM\n) AGGREGATE KEY(stat_date, channel)\nDISTRIBUTED BY HASH(stat_date) BUCKETS 1;\n\nINSERT INTO events VALUES\n    (1, 100, 'purchase', 99.99, '2024-01-15 10:30:00'),\n    (2, 100, 'purchase', 49.50, '2024-01-16 14:20:00'),\n    (3, 200, 'view', 0.00, '2024-01-15 11:00:00');\n\n-- Doris built-in functions\nSELECT date_trunc('month', occurred_at) AS month,\n       COUNT(*) AS cnt,\n       SUM(amount) AS total\nFROM events\nGROUP BY date_trunc('month', occurred_at);\n```\n\n### MaxCompute Example\n\n```python\nfrom odps import ODPS\n\no = ODPS('roris', 'roris-secret', 'default',\n         endpoint='http://127.0.0.1:9031/api')\n\n# Create table with ODPS syntax — LIFECYCLE, PARTITIONED BY all work\no.execute_sql(\"\"\"\nCREATE TABLE user_events (\n    user_id BIGINT,\n    action STRING,\n    amount DOUBLE\n) PARTITIONED BY (ds STRING) LIFECYCLE 365\n\"\"\").wait_for_success()\n\n# INSERT OVERWRITE is auto-converted to INSERT INTO\no.execute_sql(\"INSERT OVERWRITE TABLE user_events VALUES (1, 'click', 1.0)\").wait_for_success()\n```\n\n### Hologres Example\n\n```bash\npsql -h 127.0.0.1 -p 15432 -U roris -d default\n```\n\n```sql\n-- Hologres DDL with WITH clause — silently normalized\nCREATE TABLE orders (\n    id BIGINT NOT NULL,\n    user_id BIGINT,\n    amount DOUBLE PRECISION,\n    created_at TIMESTAMP,\n    PRIMARY KEY (id)\n) WITH (\n    orientation = 'column',\n    distribution_key = 'id'\n);\n\nINSERT INTO orders VALUES (1, 100, 99.99, now());\nSELECT * FROM orders WHERE user_id = 100;\n```\n\n## Architecture\n\n```\n                          +-----------------------------------+\n                          |         Client Applications       |\n                          | mysql | psql | pyodps | JDBC | ...|\n                          +------+-------+--------+-----+----+\n                                 |       |        |     |\n                   MySQL Wire    |       |        |     |  PostgreSQL v3\n                   Protocol      |       |        |     |  Wire Protocol\n                                 v       |        |     v\n                    +-----------+ +------+------+ +--+-----------+\n                    |  MySQL    | | MaxCompute  | |  Hologres    |\n                    |  Protocol | | Protocol    | |  (PG)        |\n                    |  :9030    | | :9031       | |  :15432      |\n                    +-----+----+ +------+------+ +-+----+-------+\n                          |            |              |\n                          |     SQL Translator  SQL Translator\n                          |     (strip ODPS     (strip Hologres-\n                          |      syntax)         specific DDL)\n                          |            |              |\n                          +------+-----+------+-------+\n                                 |            |\n                                 v            v\n                    +-----------------------------------+\n                    |      Doris SQL Core Engine         |\n                    |  DDL Handler | DML Handler | SELECT|\n                    |  (DataFusion SessionContext)       |\n                    +----------------+------------------+\n                                     |\n                       +-------------+-------------+\n                       |             |             |\n                       v             v             v\n                  +---------+  +----------+  +----------+\n                  |fe-catalog|  |fe-storage|  |fe-monitor|\n                  |(metadata)|  | (Parquet)|  | (audit)  |\n                  +----------+  +----+-----+  +----------+\n                                     |\n                                     v\n                              +-------------+\n                              |   Parquet   |\n                              |   Files     |\n                              +-------------+\n```\n\n### SQL Translation Pipeline\n\nAll protocol adapters translate vendor-specific syntax into RorisDB's **Doris-compatible core engine**:\n\n```\nMaxCompute:  INSERT OVERWRITE TABLE t SELECT ...  →  INSERT INTO t SELECT ...\n             PARTITIONED BY (ds STRING)           →  column `ds` added to schema\n             LIFECYCLE 365                        →  (stripped)\n             DISTRIBUTE BY col SORT BY col        →  ORDER BY col\n\nHologres:    CREATE TABLE ... WITH (orientation='column')  →  CREATE TABLE ...\n             CALL set_table_property(...)                  →  (no-op)\n             CREATE INDEX idx USING bitmap(col)            →  CREATE INDEX idx(col)\n```\n\n### Tech Stack\n\n| Component | Technology | Version |\n|-----------|-----------|---------|\n| Query Engine | Apache DataFusion | 48 |\n| Columnar Format | Apache Arrow | 55 |\n| Storage Format | Apache Parquet | 55 |\n| SQL Parser | sqlparser-rs | 0.53 |\n| Async Runtime | Tokio | 1.x |\n| Metadata | JSON / RocksDB | 0.23 |\n\n## Use Cases\n\n### Alibaba Cloud Data Pipeline Development\n\nDevelop and test MaxCompute / Hologres pipelines locally before deploying to Alibaba Cloud. RorisDB accepts the same SQL dialect and protocols, so your `pyodps` scripts and Hologres queries work without modification.\n\n**Key Benefits:**\n- Test MaxCompute SQL jobs locally without cloud costs\n- Validate Hologres queries before deployment\n- Mock Alibaba Cloud APIs for CI/CD pipelines\n- Development and debugging without internet access\n\n### Application Integration Testing\n\nValidate that your application works against MySQL-compatible databases (Doris, StarRocks, TiDB) without provisioning a cluster. Tested against 17 real-world application scenarios including WordPress, Grafana, Superset, GitLab, Airbyte, DBeaver, and phpMyAdmin.\n\n### Multi-Cloud Compatibility Testing\n\nTest that your SQL works across MySQL, MaxCompute, and PostgreSQL-family databases from a single deployment. Identify vendor-specific syntax early.\n\n### Local Analytics Workbench\n\nRun ad-hoc analytical queries on Parquet files with a familiar SQL interface. The built-in web UI at `:8080` provides an interactive environment for exploration.\n\n## SQL Compatibility\n\nRorisDB's core SQL engine is **Doris-compatible**. MaxCompute and Hologres protocols translate their vendor-specific syntax into this common Doris-based engine.\n\n### Doris Table Models\n\nAll four Doris table model syntaxes are accepted and stored in metadata:\n\n| Table Model | Syntax | Execution Status |\n|------------|--------|-----------------|\n| **Duplicate** | `DUPLICATE KEY(col1, ...)` | Fully functional (append semantics) |\n| **Aggregate** | `AGGREGATE KEY(col1, ...) + col SUM/MAX/MIN/REPLACE` | Syntax accepted; auto-aggregation on insert not yet implemented |\n| **Unique** | `UNIQUE KEY(col1, ...)` | Syntax accepted; dedup on insert not yet implemented |\n| **Primary** | `PRIMARY KEY(col1, ...)` | Syntax accepted; constraint enforcement not yet implemented |\n\n**Distribution:** `DISTRIBUTED BY HASH(col1, ...) BUCKETS N`\n**Partition:** `PARTITION BY RANGE/LIST(col)`\n\n### Data Types\n\nBoolean, Int8-64, Float32/64, Decimal, Date, DateTime, Timestamp, String, Binary, Array, Map, Struct, JSON\n\n### Queries\n\n- `SELECT` with `JOIN` (INNER/LEFT/RIGHT/FULL/CROSS)\n- Subqueries and CTEs (`WITH`, `WITH RECURSIVE`)\n- Window functions (`ROW_NUMBER`, `RANK`, `DENSE_RANK`, `LAG`, `LEAD`, `NTILE`)\n- Aggregates (`COUNT`, `SUM`, `AVG`, `MIN`, `MAX`, `GROUP_CONCAT`, `BITMAP_COUNT`)\n- `GROUPING SETS`, `ROLLUP`, `CUBE`\n- `UNION`, `EXCEPT`, `INTERSECT`\n- `ORDER BY`, `GROUP BY`, `HAVING`, `LIMIT`\n\n### Doris Built-in Functions\n\n- **Date/Time:** `date_trunc`, `date_add`, `date_sub`, `months_add`, `days_add`, `hours_add`, `datediff`, `date_format`, `str_to_date`, `from_unixtime`, `unix_timestamp`, `year`, `month`, `day`, `hour`, `minute`, `second`, `dayofweek`, `dayofyear`, `last_day`, `curdate`, `curtime`\n- **String:** `concat`, `concat_ws`, `substr`, `substring`, `substring_index`, `length`, `replace`, `trim`, `upper`, `lower`, `hex`, `unhex`\n- **Math:** `truncate`, `abs`, `ceil`, `floor`, `round`, `log`, `pow`, `sqrt`, `mod`\n- **Conditional:** `if`, `ifnull`, `case when`, `coalesce`, `nullif`\n- **Utility:** `uuid`, `version`, `database`\n\n### Operations\n\n- `SHOW PROCESSLIST` — real-time connection and query info\n- `SHOW STATUS` — server metrics (uptime, queries, threads, etc.)\n- `KILL QUERY / KILL CONNECTION`\n- `SHOW DATABASES / TABLES / COLUMNS`\n- `SHOW VARIABLES` (global/session, 31 system variables)\n\n### DML\n\n- `INSERT INTO ... VALUES` (single and multi-row)\n- `INSERT INTO ... SELECT`\n- `INSERT INTO ... ON DUPLICATE KEY UPDATE` (syntax accepted; upsert execution not yet implemented)\n- `INSERT OVERWRITE TABLE` (MaxCompute syntax, auto-converted)\n- `UPDATE` with `WHERE`\n- `DELETE` with `WHERE`\n\n### DDL\n\n- `CREATE/DROP DATABASE`\n- `CREATE/DROP TABLE` with full Doris extensions (`DUPLICATE/AGGREGATE/UNIQUE/PRIMARY KEY`, `DISTRIBUTED BY HASH`, `PARTITION BY`, `PROPERTIES`)\n- `ALTER TABLE` (ADD/DROP/MODIFY COLUMN, ADD/DROP PARTITION)\n- `TRUNCATE TABLE`\n- `CREATE INDEX` (metadata-only, stored as table properties)\n\n### Vendor-Specific Syntax Handling\n\n**Doris native syntax (MySQL protocol) — directly executed:**\n\n| Syntax | Behavior |\n|--------|----------|\n| `DUPLICATE/AGGREGATE/UNIQUE/PRIMARY KEY` | Parsed and stored as table model metadata; only Duplicate semantics fully enforced |\n| `DISTRIBUTED BY HASH(col) BUCKETS N` | Parsed and stored (BUCKETS optional, defaults to 1) |\n| `PARTITION BY RANGE/LIST(col)` | Parsed and stored in metadata; partition pruning not yet implemented |\n| `PROPERTIES (\"key\" = \"value\")` | Stored as table properties |\n| `col TYPE SUM/MAX/MIN/REPLACE` | Accepted and stripped during parsing (aggregate modifiers) |\n| `INSERT ... ON DUPLICATE KEY UPDATE` | Syntax accepted; upsert execution not yet implemented |\n| `date_trunc`, `months_add`, etc. | Doris built-in functions (35 UDFs) |\n\n**MaxCompute protocol — translated to Doris engine:**\n\n| Syntax | Behavior |\n|--------|----------|\n| `PARTITIONED BY (col TYPE)` | Partition column added to schema |\n| `LIFECYCLE N` | Stripped |\n| `STORED AS ORC/PARQUET/...` | Stripped (unified Parquet internally) |\n| `INSERT OVERWRITE TABLE` | Converted to `INSERT INTO` |\n| `DISTRIBUTE BY ... SORT BY` | Converted to `ORDER BY` |\n| `CLUSTER BY col` | Converted to `ORDER BY` |\n| `LATERAL VIEW explode(col)` | Converted to `CROSS JOIN UNNEST` |\n| `SET key=value` | No-op (accepted silently) |\n\n**Hologres (PostgreSQL) protocol — translated to Doris engine:**\n\n| Syntax | Behavior |\n|--------|----------|\n| `WITH (orientation='column', ...)` | Stripped |\n| `CALL set_table_property(...)` | No-op |\n| `CREATE INDEX ... USING bitmap` | Converted to standard index |\n| `CREATE TRIGGER / DOMAIN / EXTENSION` | No-op (accepted silently) |\n| `GRANT / REVOKE` | No-op (accepted silently) |\n| `SELECT ... FOR UPDATE` | `FOR UPDATE` clause stripped |\n\n## Building from Source\n\n```bash\n# Prerequisites: Rust 2024 edition (rustup update)\ngit clone https://github.com/walker83/RorisDB.git\ncd RorisDB\n\n# Build\ncargo build --release\n\n# Run tests\ncargo test --workspace\n\n# Binary: target/release/roris-fe\n```\n\n## Configuration\n\n```bash\n# Start with default ports\n./target/release/roris-fe\n\n# Custom ports and data directory\n./target/release/roris-fe \\\n    --mysql-port 9030 \\\n    --maxcompute-port 9031 \\\n    --hologres-port 15432 \\\n    --data-dir /path/to/data \\\n    --meta-dir /path/to/meta\n\n# TOML config file (30+ system variables)\n./target/release/roris-fe --config-file config.toml\n```\n\n| Service | Default Port | CLI Flag |\n|---------|-------------|----------|\n| MySQL Wire Protocol | 9030 | `--mysql-port` |\n| MaxCompute REST API | 9031 | `--maxcompute-port` |\n| Hologres (PostgreSQL) | 15432 | `--hologres-port` |\n| Web SQL Editor | 8080 | config: `server.http_port` |\n| Metadata Directory | `data/fe/doris-meta` | `--meta-dir` |\n| Data Directory | `data/fe/storage` | `--data-dir` |\n| Config File | `roris.toml` | `--config-file` |\n\n## Project Stats\n\n- **Language:** Rust (~68,000 lines)\n- **Crates:** 20\n- **Protocols:** 3 (MySQL, MaxCompute, Hologres)\n- **SQL Dialect:** Doris-compatible core\n- **Test Coverage:** 1,440 unit tests + 19 integration test suites + 17 real-world scenarios + TPC-H benchmarks\n- **License:** Apache 2.0\n\n## Known Limitations\n\nAs a simulation platform, RorisDB prioritizes protocol compatibility and SQL grammar acceptance over production-grade enforcement. Key limitations:\n\n**Storage:**\n- Single Parquet file per table — all DML (INSERT/UPDATE/DELETE) reads the entire file, modifies in memory, and writes back. O(N) per operation.\n- No multi-segment storage or compaction yet (planned for v0.4.0).\n\n**Query Engine:**\n- Filter pushdown is limited to simple `column op literal` patterns (with AND combinations). Complex expressions (OR, IN, IS NULL, function predicates) are not pushed down.\n- Partition metadata is stored but partition pruning is not yet implemented at query time.\n- `information_schema.tables` scans all Parquet files to compute row counts on every query.\n\n**Doris Semantics:**\n- `AGGREGATE KEY` auto-aggregation on insert is not implemented (syntax accepted, modifiers stored as metadata).\n- `UNIQUE KEY` dedup on insert is not enforced.\n- `PRIMARY KEY` constraint enforcement is not implemented.\n- `ON DUPLICATE KEY UPDATE` is parsed but upsert execution is not implemented.\n\n**Security:**\n- MySQL protocol accepts any non-empty username without password validation.\n- MaxCompute and Hologres protocols properly verify HMAC and MD5 authentication respectively.\n\n**Metadata Durability:**\n- EditLog (catalog change log) is flushed asynchronously every 10 seconds. DDL changes within this window may be lost on crash.\n\n## Roadmap\n\n### v0.4.0\n- Multi-segment storage (append writes + compaction)\n- Real transactions (MVCC)\n- Parquet predicate pushdown (row group pruning)\n- Partition table execution\n\n### v0.5.0\n- Replace `types` crate with native Arrow types\n- Arrow-native QueryResult (eliminate string conversion)\n- Streaming bulk load (CSV/JSON)\n- Materialized views\n\n### v1.0.0\n- Production-ready stability\n- Full protocol fidelity across all three adapters\n- Performance optimization\n- Comprehensive documentation\n\n## Documentation\n\n- [SQL Reference](docs/en/sql-reference.md)\n- [Configuration Guide](docs/en/configuration.md)\n- [Architecture Deep Dive](docs/en/architecture.md)\n- [Alibaba Cloud Compatibility Matrix](docs/alibaba-cloud-compatibility.md)\n- [Roadmap](docs/roadmap/README.md)\n\n## Contributing\n\nContributions welcome:\n\n1. **Star the repo** — helps discovery\n2. **Report bugs** — open an issue with reproduction steps\n3. **Suggest features** — share your use case\n4. **Submit PRs** — fix bugs or add features\n5. **Write docs** — improve documentation\n\nSee [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\n## License\n\nApache License 2.0. See [LICENSE](LICENSE).\n\n## Acknowledgments\n\n- **[Apache Doris](https://doris.apache.org)** — OLAP inspiration and SQL dialect reference\n- **[Apache DataFusion](https://github.com/apache/arrow-datafusion)** — Query engine\n- **[Apache Arrow](https://arrow.apache.org)** / **[Apache Parquet](https://parquet.apache.org)** — Columnar ecosystem\n- **[sqlparser-rs](https://github.com/sqlparser-rs/sqlparser-rs)** — SQL parsing foundation\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwalker83%2Frorisdb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwalker83%2Frorisdb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwalker83%2Frorisdb/lists"}