Skip to content

Commit 5ece9d5

Browse files
yingjunwuclaude
andauthored
Seo phase2 comparison and concepts (#1075)
* docs: SEO phase 2 — comparison pages, concept pages, JSON-LD fixes - Fix JSON-LD in FAQ pages: convert JSX {JSON.stringify()} to static JSON for correct Mintlify rendering - Add RisingWave vs Materialize comparison page with FAQPage JSON-LD - Add RisingWave vs ksqlDB comparison page with FAQPage JSON-LD - Add RisingWave vs Kafka Streams comparison page with FAQPage JSON-LD - Add all comparison pages to docs.json navigation - Split key concepts into independent AEO-optimized pages: - What is a Streaming Database? - What is a Materialized View in RisingWave? - What is a Source in RisingWave? - What is a Sink in RisingWave? - What is CDC in RisingWave? - Add concept pages to docs.json navigation - Add cross-links from glossary to new concept pages Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: SEO phase 2b — internal links and HowTo JSON-LD - Add "See also" sections to 7 high-traffic pages: - get-started/intro.mdx - processing/overview.mdx - ingestion/overview.mdx - delivery/overview.mdx - cloud/intro.mdx - deploy/deployment-modes-overview.mdx - Add HowTo JSON-LD schema markup to 3 tutorial pages: - get-started/quickstart.mdx - deploy/install-psql-without-postgresql.mdx - deploy/risingwave-docker-compose.mdx Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: address PR #1075 review comments - Fix over-claimed exactly-once delivery semantics in what-is-sink.mdx and risingwave-kafka-streams-comparison.mdx — most sinks are at-least-once; exactly-once is connector-dependent - Update JSON-LD structured data to reflect accurate delivery guarantees - Replace literal password values with <your_password> placeholder in what-is-cdc.mdx examples Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * docs: SEO phase 3 — new concept pages, comparison page, JSON-LD enhancements - Add FAQPage JSON-LD to existing Flink and Kafka comparison pages - Add SoftwareApplication JSON-LD to intro.mdx - Create "What is Stream Processing?" concept page with FAQPage JSON-LD - Create "What is Streaming ETL?" concept page with FAQPage JSON-LD - Create "RisingWave vs ClickHouse" comparison page with FAQPage JSON-LD - Add all new pages to docs.json navigation - Add cross-link from glossary to stream processing concept page Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> * fix: wrap JSON-LD in template literals for MDX compatibility MDX parser (acorn) interprets raw {…} inside <script> tags as JSX expressions, causing build failures. Wrap all JSON-LD content in template literals ({`…`}) across 19 files so the JSON is emitted as literal script text. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent f0a4f7b commit 5ece9d5

26 files changed

+1903
-96
lines changed

cloud/intro.mdx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,3 +19,9 @@ Whether you are an experienced data professional or just starting, RisingWave Cl
1919
</Card>
2020

2121
</CardGroup>
22+
23+
## See also
24+
25+
- [What is RisingWave?](/get-started/intro) — Core concepts and use cases
26+
- [Deployment options](/deploy/deployment-modes-overview) — Compare Cloud, Kubernetes, and Docker
27+
- [Data ingestion](/ingestion/overview) — Connect your data sources

delivery/overview.mdx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,3 +220,10 @@ WITH (
220220

221221
In this example, if the number of rows in the file exceeds 100, or if writing has continued for more than 10 seconds, the writing of this file will be completed.
222222
Once completed, the file will be visible in the downstream sink system.
223+
224+
## See also
225+
226+
- [What is a Sink?](/reference/what-is-sink) — Sink concepts, emission modes, and connector overview
227+
- [Data ingestion](/ingestion/overview) — How data enters RisingWave
228+
- [Data processing](/processing/overview) — Transform data before delivery
229+
- [CREATE SINK](/sql/commands/sql-create-sink) — SQL reference

deploy/deployment-modes-overview.mdx

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,10 @@ Best for learning, development, and quick testing. It runs as a single process a
4747
Easy setup for local testing with multiple services. Not recommended for production.
4848

4949
[Learn more →](/deploy/risingwave-docker-compose)
50+
51+
## See also
52+
53+
- [Quick start](/get-started/quickstart) — Get RisingWave running in minutes
54+
- [What is RisingWave?](/get-started/intro) — Core concepts and architecture
55+
- [RisingWave Cloud](/cloud/intro) — Fully managed cloud service
56+
- [Hardware requirements](/deploy/hardware-requirements) — Sizing guidelines

deploy/install-psql-without-postgresql.mdx

Lines changed: 39 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,43 @@ This is the usual way of installing PostgreSQL on Windows. But to install the cl
7171
</Tab>
7272
</Tabs>
7373

74-
75-
74+
<head>
75+
<script type="application/ld+json">
76+
{`
77+
{
78+
"@context": "https://schema.org",
79+
"@type": "HowTo",
80+
"name": "How to install psql without PostgreSQL",
81+
"description": "Install the psql command-line client for connecting to RisingWave or PostgreSQL, without installing the full PostgreSQL server. Instructions for macOS, Debian/Ubuntu, Red Hat/CentOS, Fedora, and Windows.",
82+
"step": [
83+
{
84+
"@type": "HowToStep",
85+
"name": "Install on macOS",
86+
"text": "Install Homebrew if needed, run 'brew update', then 'brew install libpq', then 'brew link --force libpq' to make psql available in your PATH."
87+
},
88+
{
89+
"@type": "HowToStep",
90+
"name": "Install on Debian/Ubuntu",
91+
"text": "Run 'sudo apt update' followed by 'sudo apt install postgresql-client' to install the psql client."
92+
},
93+
{
94+
"@type": "HowToStep",
95+
"name": "Install on Red Hat/CentOS",
96+
"text": "Install the PostgreSQL repository RPM from postgresql.org, then run 'sudo yum install postgresql' to install the client tools."
97+
},
98+
{
99+
"@type": "HowToStep",
100+
"name": "Install on Fedora",
101+
"text": "Run 'sudo dnf install postgresql.x86_64' to install the PostgreSQL client including psql."
102+
},
103+
{
104+
"@type": "HowToStep",
105+
"name": "Install on Windows",
106+
"text": "Use the interactive installer by EDB from postgresql.org. During installation, select only 'Command Line Tools' and uncheck other components."
107+
}
108+
]
109+
}
110+
`}
111+
</script>
112+
</head>
76113

deploy/risingwave-docker-compose.mdx

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -235,3 +235,38 @@ Error { code: "XMinioStorageFull", message: "Storage backend has reached its min
235235
```
236236
237237
This issue typically occurs on macOS when using Docker Desktop. Docker Desktop runs within the macOS Hypervisor, where all the data, including logs, images, and volumes, is stored. The macOS Hypervisor has a default limit on disk capacity. If you encounter this error, you can resolve it by cleaning up unused containers or images. Another option is to increase the disk image size limit by following these steps: Click on the Docker Desktop icon in the menu bar, then go to **Preferences** \> **Resources** \> **Advanced**, and adjust the slider for disk image size to allocate more space for Docker images. If you are using a different platform, please ensure sufficient space is available on the local disk.
238+
239+
<head>
240+
<script type="application/ld+json">
241+
{`
242+
{
243+
"@context": "https://schema.org",
244+
"@type": "HowTo",
245+
"name": "How to deploy RisingWave with Docker Compose",
246+
"description": "Deploy a RisingWave cluster using Docker Compose with persistent storage and observability. Includes state store and meta store configuration options.",
247+
"step": [
248+
{
249+
"@type": "HowToStep",
250+
"name": "Download the source file",
251+
"text": "Install Docker Desktop, then clone the RisingWave repository with 'git clone https://github.com/risingwavelabs/risingwave.git' and navigate to the docker directory."
252+
},
253+
{
254+
"@type": "HowToStep",
255+
"name": "Configure state store and meta store",
256+
"text": "Choose your state store (MinIO, S3, GCS, Azure Blob, HDFS) and meta store (PostgreSQL, MySQL, SQLite) by selecting the appropriate Docker Compose configuration file."
257+
},
258+
{
259+
"@type": "HowToStep",
260+
"name": "Start the RisingWave cluster",
261+
"text": "Run 'docker compose up -d' to start the cluster with the default MinIO configuration, or specify a custom configuration file with the -f flag."
262+
},
263+
{
264+
"@type": "HowToStep",
265+
"name": "Connect to RisingWave",
266+
"text": "Connect to RisingWave using psql: psql -h localhost -p 4566 -d dev -U root"
267+
}
268+
]
269+
}
270+
`}
271+
</script>
272+
</head>

docs.json

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -468,11 +468,22 @@
468468
"group": "Reference",
469469
"pages": [
470470
"reference/key-concepts",
471+
"reference/what-is-streaming-database",
472+
"reference/what-is-materialized-view",
473+
"reference/what-is-source",
474+
"reference/what-is-sink",
475+
"reference/what-is-cdc",
476+
"reference/what-is-stream-processing",
477+
"reference/what-is-streaming-etl",
471478
"reference/fault-tolerance",
472479
"reference/data-persistence",
473480
"reference/risingwave-kafka-comparison",
474481
"reference/risingwave-flink-comparison",
475-
"reference/rw-flink-feature-comparison"
482+
"reference/rw-flink-feature-comparison",
483+
"reference/risingwave-materialize-comparison",
484+
"reference/risingwave-ksqldb-comparison",
485+
"reference/risingwave-kafka-streams-comparison",
486+
"reference/risingwave-clickhouse-comparison"
476487
]
477488
},
478489
{

faq/faq-using-risingwave.mdx

Lines changed: 42 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -104,43 +104,47 @@ total_memory: 8.00 GiB
104104

105105
For guidance on tuning memory allocation, see [Tune reserved memory](/operate/tune-reserved-memory).
106106

107-
<script type="application/ld+json">
108-
{JSON.stringify({
109-
"@context": "https://schema.org",
110-
"@type": "FAQPage",
111-
"mainEntity": [
107+
<head>
108+
<script type="application/ld+json">
109+
{`
112110
{
113-
"@type": "Question",
114-
"name": "Why is RisingWave memory usage so high?",
115-
"acceptedAnswer": {
116-
"@type": "Answer",
117-
"text": "This is by design. RisingWave uses memory for in-memory caching of streaming query state to optimize performance. By default, it utilizes all available memory unless configured via RW_TOTAL_MEMORY_BYTES. Setting memory limits is required in Kubernetes and Docker deployments."
118-
}
119-
},
120-
{
121-
"@type": "Question",
122-
"name": "Why is the memory for a RisingWave Serving or Streaming Node not fully utilized?",
123-
"acceptedAnswer": {
124-
"@type": "Answer",
125-
"text": "RisingWave reserves a portion of total memory for system usage. Starting from v1.10, it uses a gradient formula: 30% of the first 16GB plus 20% of the remaining memory. You can override this with the RW_RESERVED_MEMORY_BYTES environment variable or --reserved-memory-bytes startup option (minimum 512MB)."
126-
}
127-
},
128-
{
129-
"@type": "Question",
130-
"name": "Why does CREATE MATERIALIZED VIEW take a long time in RisingWave?",
131-
"acceptedAnswer": {
132-
"@type": "Answer",
133-
"text": "CREATE MATERIALIZED VIEW backfills all historical data from referenced tables to ensure a consistent snapshot. Use SHOW JOBS to check progress. To run non-blocking, set BACKGROUND_DDL=true before the CREATE statement. If progress stays at 0%, the cluster may be experiencing high latency."
134-
}
135-
},
136-
{
137-
"@type": "Question",
138-
"name": "What does RisingWave memory usage consist of?",
139-
"acceptedAnswer": {
140-
"@type": "Answer",
141-
"text": "RisingWave memory is divided into storage memory (block cache, meta cache, shared buffer), compute memory (streaming computation and queries), and reserved memory (system overhead). For example, an 8GB node uses approximately 2.13GB for storage, 3.47GB for compute, and 2.40GB reserved."
142-
}
111+
"@context": "https://schema.org",
112+
"@type": "FAQPage",
113+
"mainEntity": [
114+
{
115+
"@type": "Question",
116+
"name": "Why is RisingWave memory usage so high?",
117+
"acceptedAnswer": {
118+
"@type": "Answer",
119+
"text": "This is by design. RisingWave uses memory for in-memory caching of streaming query state to optimize performance. By default, it utilizes all available memory unless configured via RW_TOTAL_MEMORY_BYTES. Setting memory limits is required in Kubernetes and Docker deployments."
120+
}
121+
},
122+
{
123+
"@type": "Question",
124+
"name": "Why is the memory for a RisingWave Serving or Streaming Node not fully utilized?",
125+
"acceptedAnswer": {
126+
"@type": "Answer",
127+
"text": "RisingWave reserves a portion of total memory for system usage. Starting from v1.10, it uses a gradient formula: 30% of the first 16GB plus 20% of the remaining memory. You can override this with the RW_RESERVED_MEMORY_BYTES environment variable or --reserved-memory-bytes startup option (minimum 512MB)."
128+
}
129+
},
130+
{
131+
"@type": "Question",
132+
"name": "Why does CREATE MATERIALIZED VIEW take a long time in RisingWave?",
133+
"acceptedAnswer": {
134+
"@type": "Answer",
135+
"text": "CREATE MATERIALIZED VIEW backfills all historical data from referenced tables to ensure a consistent snapshot. Use SHOW JOBS to check progress. To run non-blocking, set BACKGROUND_DDL=true before the CREATE statement. If progress stays at 0%, the cluster may be experiencing high latency."
136+
}
137+
},
138+
{
139+
"@type": "Question",
140+
"name": "What does RisingWave memory usage consist of?",
141+
"acceptedAnswer": {
142+
"@type": "Answer",
143+
"text": "RisingWave memory is divided into storage memory (block cache, meta cache, shared buffer), compute memory (streaming computation and queries), and reserved memory (system overhead). For example, an 8GB node uses approximately 2.13GB for storage, 3.47GB for compute, and 2.40GB reserved."
144+
}
145+
}
146+
]
143147
}
144-
]
145-
})}
146-
</script>
148+
`}
149+
</script>
150+
</head>

faq/faq-when-to-use-risingwave.mdx

Lines changed: 58 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -90,59 +90,63 @@ Materialized views in RisingWave are fundamentally different from those in OLAP
9090
- **Highly available**: Persisted to object storage with frequent checkpoints for fast failure recovery.
9191
- **Resource isolation**: Streaming computation and ad-hoc queries can run on separate node groups to avoid interference.
9292

93-
<script type="application/ld+json">
94-
{JSON.stringify({
95-
"@context": "https://schema.org",
96-
"@type": "FAQPage",
97-
"mainEntity": [
93+
<head>
94+
<script type="application/ld+json">
95+
{`
9896
{
99-
"@type": "Question",
100-
"name": "Can RisingWave replace Flink SQL?",
101-
"acceptedAnswer": {
102-
"@type": "Answer",
103-
"text": "Yes. RisingWave is a superset of Flink SQL in terms of capabilities. Users of Flink SQL can easily migrate to RisingWave. RisingWave also offers additional features not present in Flink SQL, such as cascading materialized views. RisingWave uses PostgreSQL syntax, which lowers the learning curve compared to Flink SQL."
104-
}
105-
},
106-
{
107-
"@type": "Question",
108-
"name": "Is RisingWave a unified batch and streaming system?",
109-
"acceptedAnswer": {
110-
"@type": "Answer",
111-
"text": "Yes, RisingWave fully supports both stream processing (continuous incremental computation) and batch processing (computation on stored data). RisingWave shines in stream processing and uses row-based storage optimized for point queries."
112-
}
113-
},
114-
{
115-
"@type": "Question",
116-
"name": "Does RisingWave support transaction processing?",
117-
"acceptedAnswer": {
118-
"@type": "Answer",
119-
"text": "RisingWave supports read-only transactions but does not support read-write transaction processing. It is designed to be positioned downstream from transactional databases, using CDC to replicate data for real-time stream processing."
120-
}
121-
},
122-
{
123-
"@type": "Question",
124-
"name": "Why does RisingWave use row-based storage for tables?",
125-
"acceptedAnswer": {
126-
"@type": "Answer",
127-
"text": "RisingWave uses row-based storage (Hummock) because the same storage engine serves both internal state management for streaming queries and data storage for serving queries. Row-based storage is well-suited for streaming state management and point queries."
128-
}
129-
},
130-
{
131-
"@type": "Question",
132-
"name": "What are the differences between streaming databases and real-time OLAP databases?",
133-
"acceptedAnswer": {
134-
"@type": "Answer",
135-
"text": "Streaming databases like RisingWave optimize for result freshness with real-time materialized views, monitoring, and alerting. OLAP databases like ClickHouse optimize for ad-hoc analytical query performance. Streaming databases use row-based storage while OLAP databases use columnar storage."
136-
}
137-
},
138-
{
139-
"@type": "Question",
140-
"name": "How do materialized views in RisingWave differ from those in OLAP databases?",
141-
"acceptedAnswer": {
142-
"@type": "Answer",
143-
"text": "Materialized views in RisingWave are updated synchronously in real time, strongly consistent across cascading views, and support full stream processing semantics. OLAP databases typically use best-effort periodic refresh and do not support cascading materialized views."
144-
}
97+
"@context": "https://schema.org",
98+
"@type": "FAQPage",
99+
"mainEntity": [
100+
{
101+
"@type": "Question",
102+
"name": "Can RisingWave replace Flink SQL?",
103+
"acceptedAnswer": {
104+
"@type": "Answer",
105+
"text": "Yes. RisingWave is a superset of Flink SQL in terms of capabilities. Users of Flink SQL can easily migrate to RisingWave. RisingWave also offers additional features not present in Flink SQL, such as cascading materialized views. RisingWave uses PostgreSQL syntax, which lowers the learning curve compared to Flink SQL."
106+
}
107+
},
108+
{
109+
"@type": "Question",
110+
"name": "Is RisingWave a unified batch and streaming system?",
111+
"acceptedAnswer": {
112+
"@type": "Answer",
113+
"text": "Yes, RisingWave fully supports both stream processing (continuous incremental computation) and batch processing (computation on stored data). RisingWave shines in stream processing and uses row-based storage optimized for point queries."
114+
}
115+
},
116+
{
117+
"@type": "Question",
118+
"name": "Does RisingWave support transaction processing?",
119+
"acceptedAnswer": {
120+
"@type": "Answer",
121+
"text": "RisingWave supports read-only transactions but does not support read-write transaction processing. It is designed to be positioned downstream from transactional databases, using CDC to replicate data for real-time stream processing."
122+
}
123+
},
124+
{
125+
"@type": "Question",
126+
"name": "Why does RisingWave use row-based storage for tables?",
127+
"acceptedAnswer": {
128+
"@type": "Answer",
129+
"text": "RisingWave uses row-based storage (Hummock) because the same storage engine serves both internal state management for streaming queries and data storage for serving queries. Row-based storage is well-suited for streaming state management and point queries."
130+
}
131+
},
132+
{
133+
"@type": "Question",
134+
"name": "What are the differences between streaming databases and real-time OLAP databases?",
135+
"acceptedAnswer": {
136+
"@type": "Answer",
137+
"text": "Streaming databases like RisingWave optimize for result freshness with real-time materialized views, monitoring, and alerting. OLAP databases like ClickHouse optimize for ad-hoc analytical query performance. Streaming databases use row-based storage while OLAP databases use columnar storage."
138+
}
139+
},
140+
{
141+
"@type": "Question",
142+
"name": "How do materialized views in RisingWave differ from those in OLAP databases?",
143+
"acceptedAnswer": {
144+
"@type": "Answer",
145+
"text": "Materialized views in RisingWave are updated synchronously in real time, strongly consistent across cascading views, and support full stream processing semantics. OLAP databases typically use best-effort periodic refresh and do not support cascading materialized views."
146+
}
147+
}
148+
]
145149
}
146-
]
147-
})}
148-
</script>
150+
`}
151+
</script>
152+
</head>

get-started/intro.mdx

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,32 @@ For high-frequency telemetry and device data in connected environments such as l
7272
### Streaming lakehouse
7373
For real-time lakehouse architectures built on open formats such as Apache Iceberg. RisingWave continuously ingests data from Postgres, Kafka, and other operational systems, performs transformations, compacts small files, manages schema evolution, and writes data into Iceberg tables for unified analytics and long-term retention.
7474

75-
75+
## See also
76+
77+
- [Quick start](/get-started/quickstart) — Install RisingWave and run your first streaming query
78+
- [Source, Table, MV, and Sink](/get-started/source-table-mv-sink) — Understand the four core objects
79+
- [Data ingestion](/ingestion/overview) — Connect to Kafka, databases, and more
80+
- [Data processing](/processing/overview) — Streaming and ad-hoc SQL execution
81+
- [Deployment options](/deploy/deployment-modes-overview) — Docker, Kubernetes, or Cloud
82+
83+
<head>
84+
<script type="application/ld+json">
85+
{`
86+
{
87+
"@context": "https://schema.org",
88+
"@type": "SoftwareApplication",
89+
"name": "RisingWave",
90+
"applicationCategory": "Database",
91+
"operatingSystem": "Linux, macOS, Docker, Kubernetes",
92+
"description": "RisingWave is an open-source, PostgreSQL-compatible streaming database for real-time data ingestion, stream processing, low-latency serving, and Apache Iceberg management.",
93+
"url": "https://risingwave.com",
94+
"license": "https://opensource.org/licenses/Apache-2.0",
95+
"offers": {
96+
"@type": "Offer",
97+
"price": "0",
98+
"priceCurrency": "USD"
99+
}
100+
}
101+
`}
102+
</script>
103+
</head>

0 commit comments

Comments
 (0)