-
Notifications
You must be signed in to change notification settings - Fork 5
better and simple structure and better why timeplus #371
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1,4 @@ | ||
| # Key Terms and Concepts | ||
| # Concepts | ||
|
|
||
| This page lists key terms and concepts in Timeplus, from A to Z. | ||
|
|
||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,57 +1,78 @@ | ||
| # Why Timeplus? | ||
| # What is Timeplus | ||
|
|
||
| Timeplus is a unified real-time data processing platform built for developers who need to move, transform, and act on data fast. At the heart of Timeplus is an incremental processing engine that uses modern vectorization (SIMD), just-in-time (JIT) compilation, and advanced database internals to ingest, transform, store, and serve data with low latency and high throughput. | ||
|
|
||
| It plugs right into the tools you already use — stream sources like Kafka, Redpanda, and Pulsar, and sinks like ClickHouse, Apache Iceberg, S3, Splunk, Elasticsearch, and MongoDB. You can easily build pipelines that consume events, run streaming ETL, joins, aggregations, filtering, and other transformations, then push the results wherever they need to go — fast. | ||
|
|
||
| Timeplus isn’t just for streaming. It also supports scheduled batch jobs, so you can mix real-time and periodic workloads in one place. Pair it with Timeplus Alert to trigger actions on live data and manage the full lifecycle of your data applications—without duct-taping multiple tools together. | ||
|
|
||
| ## Why Timeplus | ||
|
|
||
| Timeplus simplifies stateful stream processing and analytics with a fast, single-binary engine. Using SQL as a domain-specific language and both row and column-based state stores, it enables developers to build real-time applications, data pipelines, and analytical dashboards at the edge or in the cloud, reducing the cost, time, and complexity of multi-component stacks. | ||
|
|
||
| ## Architecture: The Best of Both Worlds {#architecture} | ||
| ### Architecture: The Best of Both Worlds {#architecture} | ||
|
|
||
|  | ||
|
|
||
| ## Unified streaming and historical data processing {#unified} | ||
| ### Unified Streaming and Historical Data Processing {#unified} | ||
|
|
||
| Timeplus streams offer high performance, resiliency, and seamless querying by using an internal Write Ahead Log (WAL) and Historical Store. The WAL ensures ultra-fast inserts and updates, while the Historical Store, optimized for various query types, handles efficient historical queries. | ||
| Timeplus streams deliver high performance, resiliency, and smooth querying through an internal Write-Ahead Log (WAL, called NativeLog) and a Historical Store. The WAL enables ultra-fast data ingestion, while the Historical Store — stored in either columnar or row format and enhanced with compaction and indexing — supports efficient historical range and point queries. | ||
|
|
||
| This architecture transparently serves data to users based on query type from both, often eliminating the need for Apache Kafka as a commit log or a separate downstream database, streamlining your data infrastructure. | ||
|
|
||
| ## Append and Mutable Streams {#streams} | ||
| ### Append and Mutable Streams {#streams} | ||
|
|
||
| Configure types of streams to optimize performance. | ||
|
|
||
| * [Append streams:](/append-stream) | ||
| Excel at complex aggregations, storing data in a columnar format for faster access and processing. | ||
| * [Mutable streams:](/mutable-stream) Support UPSERTs and DELETEs, ideal for applications like Materialized Caches or GDPR compliance, using a row-based store optimized for fast data retrieval and query consistency. | ||
|
|
||
| ## Single Binary {#binary} | ||
| Timeplus is a fast, powerful, and efficient SQL stream processing platform with no dependencies, JVM, or ZK. It runs in bare-metal or Kubernetes environments, from edge to cloud, using a single binary (~150MB). | ||
| * [Mutable streams:](/mutable-stream) Support UPSERTs and DELETEs, ideal for applications which require high frequent and high cardinality data mutations, using a row-based store optimized for fast data retrieval and query consistency. | ||
|
|
||
| ### Single Binary {#binary} | ||
|
|
||
| Timeplus is a fast, powerful, and efficient SQL stream processing platform with no dependencies, JVM, or ZK. It runs in bare-metal or Kubernetes environments, from edge to cloud, using a single binary. | ||
|
|
||
| Timeplus scales easily from edge devices to multi-node clusters, and with its Append-Only data structures and historical stores, some use cases may not need Kafka or a separate database at all. | ||
|
|
||
| ## Multi-JOINs and ASOF JOINs {#join} | ||
| ### Multi-JOINs and ASOF JOINs {#join} | ||
|
|
||
| Stream processing involves combining multiple data sources, and [MULTI-JOINs](/joins) are essential for enriching and correlating events in streaming queries. Timeplus allows you to run ad-hoc historical queries on the same data, reducing the need for denormalization in downstream data warehouses. | ||
|
|
||
| In many cases, Business Intelligence and analytical queries can be executed directly in Timeplus, eliminating the need for a separate data warehouse. [ASOF JOINs](/joins) enable approximate time-based lookups for comparing recent versus historical data. | ||
|
|
||
| ## Python and JavaScript UDF {#udf} | ||
| ### Python and JavaScript UDF {#udf} | ||
|
|
||
| We understand that SQL may not be able to express all business logic for streaming or querying. [JavaScript](/js-udf) and [Python](/py-udf) User Defined Functions (UDFs) and User Defined Aggregate Functions (UDAFs) can be used to extend Timeplus to encapsulate custom logic for both stateless and stateful queries. | ||
|
|
||
| With Python UDFs, this opens up the possibility to bring in pre-existing and popular libraries, including data science and machine learning libraries! | ||
|
|
||
| ## External Stream, External Table {#external} | ||
| ### External Stream, External Table {#external} | ||
|
|
||
| We want to simplify the experience of joining data from Apache Kafka and writing results out to data warehouses such as Clickhouse, or another Timeplus instance. Timeplus implements native integration to these systems in timeplusd via EXTERNAL STREAM (with [Kafka](/proton-kafka) and [Timeplus](/timeplus-external-stream)) and [EXTERNAL TABLE (with ClickHouse)](/proton-clickhouse-external-table). No need for deploying yet another Connector component. | ||
|
|
||
| We understand that we cannot do this for all systems and for that, we have Timeplus Connector which can be configured to integrate with hundreds of other systems if needed. | ||
|
|
||
| ## Collection {#collection} | ||
| With built-in External Streams and External Tables, Timeplus can natively collect real-time data from, or send data to, Kafka, Redpanda, ClickHouse, or another Timeplus instance, without any data duplication. | ||
| ### Collection {#collection} | ||
|
|
||
| With built-in External Streams and External Tables, Timeplus can natively collect real-time data from, or send data to, Kafka, Redpanda, ClickHouse, or another Timeplus instance, without duplicating data in yet another place. | ||
|
|
||
| Timeplus also supports a wide range of data sources through sink/source connectors. Users can push data from files (CSV/TSV), via native SDKs in Java, Go, or Python, JDBC/ODBC, Websockets, or REST APIs. | ||
|
|
||
| ## Transformation {#transformation} | ||
| ### Transformation {#transformation} | ||
|
|
||
| With a powerful streaming SQL console, users can leverage their preferred query language to create Streams, Views, and incremental Materialized Views. This enables them to transform, roll up, join, correlate, enrich, aggregate, and downsample real-time data, generating meaningful outputs for real-time alerting, analytics, or any downstream systems. | ||
|
|
||
| ## Routing {#routing} | ||
| ### Routing {#routing} | ||
|
|
||
| Timeplus allows data to be routed to different sinks based on SQL-based criteria and provides a data lineage view of all derived streams in its console. A single data result can generate multiple outputs for various scenarios and systems, such as analytics, alerting, compliance, etc., without any vendor lock-in. | ||
|
|
||
| ## Analytics and Alerting {#alerts} | ||
| ### Analytics and Alerting {#alerts} | ||
|
|
||
| Powered by SSE (Server-Sent Events), Timeplus supports push-based, low-latency dashboards to visualize real-time insights through data pipelines or ad-hoc queries. Additionally, users can easily build observability dashboards using Grafana plugins. | ||
|
|
||
| SQL-based rules can be used to trigger or resolve alerts in systems such as PagerDuty, Slack, and other downstream platforms. | ||
|
|
||
| ### Scalability and Elasticity | ||
|
|
||
| Timeplus supports both MPP architecture for pure on-prem deployments—ideal when ultra-low latency is critical and storage/compute separation for elastic, cloud-native setups. In the latter mode, S3 is used for the NativeLog, Historical Store, and Query State Checkpoints. Combined with Kubernetes HPA or AWS Auto Scaling Groups, this enables highly concurrent continuous queries on clusters that scale automatically with demand. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
bug