RisingWave is an open-source distributed streaming database targeting real-time analytics and event-driven applications. It uses the incremental computation model to process streaming data with low latency. RisingWave implements a traditional change propagation framework to keep user-defined materialized views up-to-date. An incremental checkpoint mechanism is used to ensure data consistency. It also has an elastic multi-node architecture with separate data and compute nodes. RisingWave is built from scratch with Rust and is wire compatible with PostgreSQL.[04][05][06]
- Source Code
- https://github.com/risingwavelabs/risingwave[02]
- @RisingWaveLabs
- Developer
- Country of Origin
- US
- Start Year
- 2021
- Project Types
- Commercial, Open Source
- Written in
- Rust
- Supported Languages
- Go, Java, JavaScript, Python
- Compatible With
- PostgreSQL
- Operating System
- Linux
- License
- Apache v2
RisingWave is an open-source distributed streaming database targeting real-time analytics and event-driven applications. It uses the incremental computation model to process streaming data with low latency. RisingWave implements a traditional change propagation framework to keep user-defined materialized views up-to-date. An incremental checkpoint mechanism is used to ensure data consistency. It also has an elastic multi-node architecture with separate data and compute nodes. RisingWave is built from scratch with Rust and is wire compatible with PostgreSQL.[04][05][06]
History[07][08][09]
RisingWave Database is built by RisingWave Labs (formerly known as Singularity Data), a database systems startup founded in 2021 by former IBM researcher and Amazon Redshift engineer Yingjun Wu.
While working at Amazon Redshift, Wu noticed that existing database systems cannot process streaming data efficiently and existing streaming systems were too complicated for most companies to use. These observations motivated Wu to found RisingWave Labs with a mission to “democratize stream processing”.
Checkpoints[10][11][12]
RisingWave uses the Chandy–Lamport algorithm to create consistent checkpoints.
To ensure that data is correct and consistent, read queries always fetch data from the most recent checkpoint. This means RisingWave does not ensure read-after-write consistency.
A local shared buffer is used to stage uncommitted write batches submitted by operators. The storage manager will notify all operators to commit their buffered writes into the shared storage when the checkpoint trigger message has reached all operators.
Compression[13][14]
RisingWave applies both naive compression and prefix compression at the block-level. It uses LZ4 and Zstd for naive compression.
Concurrency Control[15]
RisingWave does not support concurrency control in its compute engine. However, it does employ Multi-version Concurrency Control (MVCC) in its storage engine.
Data Model[16]
RisingWave uses a relational data model. Its relational tables are composed of a list of strongly-typed columns. All columns are implicitly nullable. The supported primitive data types are boolean, integer, fixed-point and floating-point numbers, strings, and temporals. Composite data types of struct and list are also supported.
Indexes[17][15]
RisingWave does not support traditional index data structures. Instead, indexes are implemented as specialized materialized views. RisingWave stores materialized views as key-value pairs in log-structured merge trees.
Joins[18][19][20]
RisingWave supports hash join, nested loop join, and index nested loop join (also called lookup join). RisingWave has two execution modes: the batch-query mode and the streaming mode. All three join strategies are used in the batch-query mode, while only hash join and lookup join are used in the streaming mode. The supported join types are inner join, left outer join, right outer join, and full outer join. Window joins are also available as part of RisingWave's support for time window functions.
Parallel Execution[21][22][23][24]
RisingWave supports bushy parallelism in both its batch-query and streaming modes. Consistent hashing is employed to partition data for parallel execution.
Query Execution[25][16]
RisingWave adopts the top-to-bottom vectorized processing model. Operators emit a Data Chunk in batch-query mode and a Stream Chunk in streaming mode. A Data Chunk consists of multiple columns and a visibility array (represents each row's visibility status for row filtering purposes). A Stream Chunk consists of multiple columns, a visibility array, and an additional ops column marking an operation on each row. Each entry in the ops column can be one of Delete, Insert, UpdateDelete, or UpdateInsert.
Query Interface[26][27]
The RisingWave SQL query interface is mostly compatible with PostgreSQL. It has client libraries in Java, Node.js, Python, and Go. RisingWave is wire compatible with PostgreSQL and can be accessed with PostgreSQL terminal psql. As a cloud-native database, RisingWave can be integrated with cloud services such as Confluent Cloud, DataStax, and Grafana Cloud. To support stream processing, RisingWave can be integrated with the following message brokers or streaming services: Kafka, Redpanda, Apache Pulsar, DataStax Astra Streaming, StreamNative Cloud, and Kinesis Data Streams.
Storage Architecture[15][12]
RisingWave has a disk-oriented storage architecture. Files are directly written to an S3-compatible shared storage service by default. RisingWave also supports local drives, Google Cloud Storage, and HDFS/WebHDFS as shared storage destinations.
Storage Model[15][28][16]
RisingWave uses the row store format. Each row is encoded into key-value entries.
Storage Organization[15]
RisingWave uses a LSM-Tree based key-value storage engine that provides MVCC read and write capabilities. All key-value pairs are stored in block-based sorted strings tables (SST). Each SST consists of two files:
- The
.datafile is composed of 64KB blocks containing the actual key-value pairs. - The
.metafile contains metadata such as min-max index, Bloom filter, and per-block metadata.
System Architecture[21][30]
RisingWave adopts a disaggregated architecture to support elastically scaling the compute nodes without migrating the storage. A RisingWave database is composed of four key layers:
- A serving layer that parses, plans, and optimizes SQL queries.
- A processing layer that performs all the data computations and updates.
- A persistence layer that stores and retrieves data on an object storage service (such as S3).
- A meta server that coordinates the operations between the serving layer and the processing layer.
The serving, processing, and persistent layers each consist of multiple nodes. Compute nodes in the processing layer execute the optimized query plan (generated by the serving layer) in parallel. Compactor nodes in the persistent layer compact data with consistent hashing and upload the resulting SST files to shared storage.
The meta server is responsible for many tasks, including but not limited to:
- Managing the stream graph of RisingWave
- Managing barrier injection and collection for initiating checkpoint capture
- Manages the cluster information, such as the address and status of nodes
- Detecting failure by periodically sending heartbeats to serving-layer and processing-layer nodes
Views[31][32][33]
RisingWave supports both views and materialized views. New materialized views can be created based on existing materialized views. RisingWave updates materialized views incrementally as new data is fed into the database.
Citations
37 sources- RisingWave | Streaming Infrastructure for Agentic AI risingwave.com
- GitHub - risingwavelabs/risingwave: Event streaming platform for agentic AI. Continuously ingest, transform, and serve event streams in real time, at scale. · GitHub github.com
- What is RisingWave? - RisingWave risingwave.com
- https://docs.risingwave.com/docs/current/intro risingwave.com
- risingwave/docs at main · risingwavelabs/risingwave · GitHub github.com
- https://www.risingwave.com/products/RisingWaveDatabase/ risingwave.com
- https://www.risingwave.com/blog/risingwave-A-Cloud-Native-Streaming-Database/ risingwave.com
- https://www.risingwave.com/company/ risingwave.com
- Streaming data processing platform RisingWave lands $36M to launch a cloud service | TechCrunch techcrunch.com
- https://github.com/risingwavelabs/risingwave/blob/main/docs/checkpoint.md github.com
- https://docs.risingwave.com/docs/current/fault-tolerance risingwave.com
- https://docs.risingwave.com/docs/current/data-persistence risingwave.com
- risingwave/src/storage/src/hummock/sstable/block.rs at main · risingwavelabs/risingwave · GitHub github.com
- https://github.com/risingwavelabs/risingwave/blob/main/docs/state-store-overview.md#compaction github.com
- https://github.com/risingwavelabs/risingwave/blob/main/docs/state-store-overview.md github.com
- https://github.com/risingwavelabs/risingwave/blob/main/docs/data-model-and-encoding.md github.com
- Shared Indexes and Joins in Streaming Databases | RisingWave risingwave.com
- https://github.com/risingwavelabs/risingwave/tree/main/src/batch/src/executor/join github.com
- https://docs.risingwave.com/docs/current/sql-select#parameters risingwave.com
- https://docs.risingwave.com/docs/current/sql-function-time-window#window-joins risingwave.com
- https://github.com/risingwavelabs/risingwave/blob/main/docs/architecture-design.md github.com
- https://github.com/risingwavelabs/risingwave/blob/main/docs/consistent-hash.md github.com
- https://github.com/risingwavelabs/risingwave/blob/main/docs/batch-local-execution-mode.md github.com
- https://github.com/risingwavelabs/risingwave/blob/main/docs/streaming-overview.md github.com
- risingwave/src at main · risingwavelabs/risingwave · GitHub github.com
- https://docs.risingwave.com/docs/current/rw-integration-summary risingwave.com
- https://docs.risingwave.com/docs/current/risingwave-flink-comparison risingwave.com
- risingwave/integration_tests/iceberg-sink/README.md at main · risingwavelabs/risingwave · GitHub github.com
- https://docs.risingwave.com/docs/current/user-defined-functions#5-use-your-functions-in-risingwave risingwave.com
- https://docs.risingwave.com/docs/upcoming/architecture risingwave.com
- https://github.com/risingwavelabs/risingwave/blob/main/docs/mv-on-mv.md github.com
- https://docs.risingwave.com/docs/current/key-concepts risingwave.com
- https://docs.risingwave.com/docs/upcoming/intro#real-time-results-via-materialized-views risingwave.com
- https://github.com/risingwavelabs/risingwave/commit/78e65cd4564eac9b7fb329a572ae971a40931680 github.com
- https://github.com/risingwavelabs/risingwave/commit/3f817f3d28892cca738251249ed513dffb801a10 github.com
- https://github.com/risingwavelabs/risingwave/commit/ae8f78baea236c1ad9d06bc089516f4b2277369e github.com
- https://github.com/risingwavelabs/risingwave/commit/5eca6e90e4023bd5fe4362847c9c01b12fff6319 github.com