Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
yingjunwu authored Jan 4, 2024
1 parent 788d6cd commit 2ef7036
Showing 1 changed file with 19 additions and 4 deletions.
23 changes: 19 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@
</a>
</div>
RisingWave is a distributed SQL streaming database that enables <b>simple</b>, <b>efficient</b>, and <b>reliable</b> processing of streaming data.
RisingWave is a distributed SQL streaming database that strives to provide the <b>simplest way</b> to <b>process</b> and <b>manage</b> streaming data with efficiency and reliability.


![RisingWave](https://github.com/risingwavelabs/risingwave-docs/blob/main/docs/images/new_archi_grey.png)

Expand Down Expand Up @@ -98,7 +99,7 @@ For **Kubernetes deployments**, please refer to [Kubernetes with Helm](https://d

## Why RisingWave for stream processing?

RisingWave specializes in providing **incrementally updated, consistent materialized views** — a persistent data structure that represents the results of stream processing. RisingWave significantly reduces the complexity of building stream processing applications by allowing developers to express intricate stream processing logic through cascaded materialized views. Furthermore, it allows users to persist data directly within the system, eliminating the need to deliver results to external databases for storage and query serving.
RisingWave provides users with a comprehensive set of frequently used stream processing features, including but not limited to: exactly-once consistency, [time window functions](https://docs.risingwave.com/docs/current/sql-function-time-window/), [watermarks](https://docs.risingwave.com/docs/current/watermarks/), and many others. It specializes in providing **incrementally updated, consistent materialized views** — a persistent data structure that represents the results of stream processing. RisingWave significantly reduces the complexity of building stream processing applications by allowing developers to express intricate stream processing logic through cascaded materialized views. Furthermore, it allows users to persist data directly within the system, eliminating the need to deliver results to external databases for storage and query serving.

![Real-time Data Pipelines without or with RisingWave](https://github.com/risingwavelabs/risingwave/assets/100685635/414afbb7-5187-410f-9ba4-9a640c8c6306)

Expand All @@ -122,12 +123,26 @@ Compared to existing stream processing systems like [Apache Flink](https://flink
* **Instant failure recovery**
* RisingWave's state management mechanism also allows it to recover from failure in seconds, not minutes or hours.

### RisingWave as a database
RisingWave is fundamentally a database that enables users to do **more than just process streaming data**: it also **manages streaming data effectively**. RisingWave is a trusted choice for persisting your data and serving online applications. It offers an extensive array of database capabilities, which include, but are not limited to:

* High availability
* Serving highly concurrent queries
* Role-based access control (RBAC)
* Integration with data modeling tools (e.g., [dbt](https://docs.risingwave.com/docs/current/use-dbt/))
* Integration with database management tools (e.g., [Dbeaver](https://docs.risingwave.com/docs/current/dbeaver-integration/))
* Integration with BI tools (e.g., [Grafana](https://docs.risingwave.com/docs/current/grafana-integration/))
* Schema change
* Processing of semi-structured data
* And many more.


## RisingWave's limitations
RisingWave isn’t a panacea for all data engineering hurdles. It has its own set of limitations:
* **No programmable interfaces**
* RisingWave does not provide low-level APIs in languages like Java and Scala, and does not allow users to manage internal states manually (unless you want to hack!). For coding in Java, Scala, and other languages, please consider using RisingWave's User-Defined Functions (UDF).
* RisingWave does not provide low-level APIs in languages like Java and Scala, and does not allow users to manage internal states manually (unless you want to hack!). _For coding in Java, Python, and other languages, please consider using RisingWave's [User-Defined Functions (UDF)](https://docs.risingwave.com/docs/current/user-defined-functions/)_.
* **No support for transaction processing**
* RisingWave isn’t cut out for transactional workloads, thus it’s not a viable substitute for operational databases dedicated to transaction processing. However, it supports read-only transactions, ensuring data freshness and consistency. It also comprehends the transactional semantics of upstream database Change Data Capture (CDC).
* RisingWave isn’t cut out for transactional workloads, thus it’s not a viable substitute for operational databases dedicated to transaction processing. _However, it supports [read-only transactions](https://docs.risingwave.com/docs/current/transactions/#read-only-transactions), ensuring data freshness and consistency. It also comprehends the transactional semantics of upstream database [Change Data Capture (CDC)](https://docs.risingwave.com/docs/current/transactions/#transactions-within-a-cdc-table)_.
* **Not tailored for ad-hoc analytical queries**
* RisingWave's row store design is tailored for optimal stream processing performance rather than interactive analytical workloads. Hence, it's not a suitable replacement for OLAP databases. Yet, a reliable integration with many OLAP databases exists, and a collaborative use of RisingWave and OLAP databases is a common practice among many users.

Expand Down

0 comments on commit 2ef7036

Please sign in to comment.