{"id":13466078,"url":"https://github.com/orioledb/orioledb","last_synced_at":"2025-04-10T11:37:49.425Z","repository":{"id":43410382,"uuid":"432844875","full_name":"orioledb/orioledb","owner":"orioledb","description":"OrioleDB – building a modern cloud-native storage engine (... and solving some PostgreSQL wicked problems)  🇺🇦","archived":false,"fork":false,"pushed_at":"2024-10-29T10:13:19.000Z","size":5606,"stargazers_count":2885,"open_issues_count":62,"forks_count":110,"subscribers_count":54,"default_branch":"main","last_synced_at":"2024-10-29T12:15:53.313Z","etag":null,"topics":["database","orioledb","postgres","postgresql","postgresql-extension","sql","table-access-method"],"latest_commit_sha":null,"homepage":"https://orioledb.com","language":"C","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/orioledb.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":["orioledb"]}},"created_at":"2021-11-28T22:57:49.000Z","updated_at":"2024-10-29T10:13:24.000Z","dependencies_parsed_at":"2024-01-17T23:35:29.306Z","dependency_job_id":"5226992b-8f66-40f9-aab9-a268cd0bfaa3","html_url":"https://github.com/orioledb/orioledb","commit_stats":{"total_commits":722,"total_committers":21,"mean_commits":34.38095238095238,"dds":"0.48199445983379496","last_synced_commit":"2861cf9091a92bcabbbbf1f4d15f8edff480fea1"},"previous_names":[],"tags_count":19,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orioledb%2Forioledb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orioledb%2Forioledb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orioledb%2Forioledb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/orioledb%2Forioledb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/orioledb","download_url":"https://codeload.github.com/orioledb/orioledb/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246794180,"owners_count":20834937,"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":["database","orioledb","postgres","postgresql","postgresql-extension","sql","table-access-method"],"created_at":"2024-07-31T15:00:38.876Z","updated_at":"2025-04-03T07:05:51.682Z","avatar_url":"https://github.com/orioledb.png","language":"C","readme":"# OrioleDB – a cloud-native storage engine for PostgreSQL\n(A solution to PostgreSQL’s wicked problems)\n\n[![check status](https://github.com/orioledb/orioledb/actions/workflows/check.yml/badge.svg)](https://github.com/orioledb/orioledb/actions)\n[![codecov](https://codecov.io/gh/orioledb/orioledb/branch/main/graph/badge.svg?token=shh4jn0DUK)](https://codecov.io/gh/orioledb/orioledb) [![dockerhub](https://github.com/orioledb/orioledb/actions/workflows/docker.yml/badge.svg)](https://hub.docker.com/r/orioledb/orioledb/tags)\n\n\nOrioleDB is a new storage engine for PostgreSQL, bringing a modern approach to\ndatabase capacity, capabilities and performance to the world's most-loved\ndatabase platform.\n\nOrioleDB consists of an extension, building on the innovative table access\nmethod framework and other standard Postgres extension interfaces. By extending\nand enhancing the current table access methods, OrioleDB opens the door to\na future of more powerful storage models that are optimized for cloud and\nmodern hardware architectures.\n\nOrioleDB is currently distributed under the standard PostgreSQL license.\n\n1. Designed for modern hardware.  OrioleDB design avoids legacy CPU bottlenecks\n   on modern servers containing dozens and hundreds CPU cores, providing\n   optimized usage of modern storage technologies such as SSD and NVRAM.\n\n2. Reduced maintenance needs.  OrioleDB implements the concepts of undo log\n   and page-mergins, eliminating the need for dedicated garbage collection\n   processes.  Additionally, OrioleDB implements default 64-bit transaction\n   identifiers, thus eliminating the well-known and painful wraparound problem.\n\n3. Designed to be distributed.  OrioleDB implements a row-level write-ahead\n   log with support for parallel apply.  This log architecture is optimized\n   for raft consensus-based replication allowing the implementation of\n   active-active multimaster.\n\nThe key technical differentiations of OrioleDB are as follows:\n\n1. No buffer mapping and lock-less page reading.  In-memory pages in OrioleDB\n   are connected with direct links to the storage pages.  This eliminates the\n   need for in-buffer mapping along with its related bottlenecks. Additionally,\n   in OrioleDB in-memory page reading doesn't involve atomic operations.\n   Together, these design decisions bring vertical scalability for Postgres\n   to the whole new level.\n\n2. MVCC is based on the UNDO log concept.  In OrioleDB, old versions of tuples\n   do not cause bloat in the main storage system, but eviction into the undo\n   log comprising undo chains.  Page-level undo records allow the system\n   to easily reclaim space occupied by deleted tuples as soon as possible.\n   Together with page-mergins, these mechanisms eliminate bloat in the majority\n   of cases.  Dedicated VACUUMing of tables is not needed as well, removing\n   a significant and common cause of system performance deterioration and\n   database outages.\n\n3. Copy-on-write checkpoints and row-level WAL.  OrioleDB utilizes\n   copy-on-write checkpoints, which provides a structurally consistent snapshot\n   of data every moment of time.  This is friendly for modern SSDs and allows\n   row-level WAL logging.  In turn, row-level WAL logging is easy to\n   parallelize (done), compact and suitable for active-active\n   multimaster (planned).\n\nSee [introduction](doc/intro.mdx), [getting started](doc/usage/getting-started.mdx), and [architecture](doc/architecture/overview.mdx)\n documentation as well as\n[PostgresBuild 2021 slides](https://www.slideshare.net/AlexanderKorotkov/solving-postgresql-wicked-problems).  To start the development see [OrioleDB development quickstart](doc/contributing/local-builds.mdx), and [project structure](doc/contributing/structure.mdx).\n\n## Status\n\nOrioleDB now has public beta status.  It is recommended for experiments,\ntesting, benchmarking, etc., but is not recommended for production usage.\nIf you are interested in OrioleDB's benefits in production, please\n[contact us](mailto:sales@orioledb.com).\n\n## Installation\n\n### Use docker container\n\nWe provide docker images for `amd64` and `arm64v8` architectures under Alpine Linux.\n\n```\ndocker pull orioledb/orioledb:latest-pg17\n```\nFor example it can be started same as postgres server:\n```bash\n# !Don't forget to set default locale to C, POSIX or use icu-locale\ndocker run --name some-postgres -e POSTGRES_PASSWORD=... -e POSTGRES_INITDB_ARGS=\"--locale=C\" -d -p5432:5432 orioledb/orioledb:latest-pg17\n```\n\nSee [our dockerhub](https://hub.docker.com/r/orioledb/orioledb) for details on our docker container usage.  See [the docker build guide](doc/contributing/docker-builds.mdx) for information on how to build the docker images locally.\n\n### Build from source\n\nBefore building and installing OrioleDB, one should ensure to have the following:\n\n * [PostgreSQL with extensibility patches](https://github.com/orioledb/postgres): [16 (tag: patches16_34)](https://github.com/orioledb/postgres/tree/patches16_34) or [17 (tag: patches17_6)](https://github.com/orioledb/postgres/tree/patches17_6);\n * Development package of libzstd;\n * python 3.5+ with testgres package.\n\nTypical installation procedure may look like this:\n\n```bash\n $ git clone https://github.com/orioledb/orioledb\n $ cd orioledb\n # Make sure that postgres bin directory is in PATH before running\n $ make USE_PGXS=1\n # IS_DEV=1 needed for tests to success\n $ make USE_PGXS=1 install IS_DEV=1\n $ make USE_PGXS=1 installcheck\n```\n\nBefore starting working with OrioleDB, adding the following line to\n`postgresql.conf` is required.  This change requires a restart of\nthe PostgreSQL database server.\n\n```\nshared_preload_libraries = 'orioledb.so'\n```\n\n## Collations\nOrioleDB tables support only ICU, C, and POSIX collations.\n\nSo that you don't have to write COLLATE for every \"text\" field of tables you have options:\n### Create whole cluster with one of these collations:\n```bash\ninitdb --locale=C -D..\n# OR\ninitdb --locale=POSIX -D..\n# OR\ninitdb --locale-provider=icu --icu-locale=en -D...\n```\n\n### Create new database with default collation from template0\n```bash\ncreatedb --locale=C --template template0 ...\n# OR\ncreatedb --locale=POSIX --template template0 ...\n# OR\ncreatedb --locale-provider=icu --icu-locale=en --template template0 ...\n```\nOr using `CREATE DATABASE` with `LOCALE` or `ICU_LOCALE` parameters.\n\n## Setup\n\nRun the following SQL query on the database to enable the OrioleDB engine.\n\n\n```sql\nCREATE EXTENSION orioledb;\n```\n\nOnce the above steps are complete, you can start using OrioleDB's tables.\nSee [getting started](doc/usage/getting-started.mdx) documentation for details.\n\n```sql\nCREATE TABLE table_name (...) USING orioledb;\n```\n","funding_links":["https://github.com/sponsors/orioledb"],"categories":["C","\u003ca name=\"C\"\u003e\u003c/a\u003eC"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forioledb%2Forioledb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Forioledb%2Forioledb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Forioledb%2Forioledb/lists"}