<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at
    
        http://www.apache.org/licenses/LICENSE-2.0
    
    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
# Scenario

## 1. Energy & Power

### 1.1 **Background**

By collecting, storing, and analyzing massive time-series data from power generation, transmission, storage, and consumption processes—combined with real-time monitoring, accurate forecasting, and intelligent scheduling of power systems—enterprises can significantly improve energy efficiency, reduce operational costs, ensure the safety and sustainability of energy production, and maintain the stable operation of power grids.

### 1.2 **Architecture**

IoTDB provides a self-hosted time-series database solution with high availability, efficient data synchronization across networks, and optimized performance for large-scale data ingestion and querying. It enables power enterprises to handle large-scale time-series data efficiently, supporting real-time anomaly detection, forecasting models, and intelligent scheduling for both traditional and renewable energy sources.

![](/img/scenario-energy-en.png)

## 2. Aerospace

### 2.1 **Background**

With the rapid evolution of aerospace technology, digital transformation has become essential to improving flight safety and system performance. The aerospace industry generates vast amounts of time-series data throughout the lifecycle of aircraft, rockets, and satellites—from design and manufacturing to testing and operation. Managing and analyzing telemetry data in real time is critical for mission reliability, system optimization, and failure prevention.

### 2.2 **Architecture**

IoTDB’s high-performance time-series data processing capabilities enable real-time telemetry analysis, low-bandwidth data synchronization, and seamless offline data migration. Its flexible deployment and resource-efficient architecture provide a reliable foundation for aerospace enterprises, facilitating intelligent monitoring, rapid fault diagnosis, and continuous optimization of critical systems.

![](/img/scenario-aerospace-en.png)

## 3. Transportation

### 3.1 **Background**

The rapid growth of the transportation industry has heightened demand for diversified data management, particularly in critical hubs like railways and subways, where real-time, reliable, and precise data is essential. By leveraging multi-dimensional operational, condition, and geospatial data from trains, subways, ships, and vehicles, enterprises can enable intelligent scheduling, fault prediction, route optimization, and efficient maintenance. These capabilities not only improve operational efficiency but also reduce management costs.

### 3.2 **Architecture**

IoTDB’s high-throughput time-series database supports low-latency queries, high concurrency, and efficient processing of multi-source heterogeneous data. It provides a scalable foundation for intelligent transportation systems, enabling real-time analytics for vehicle monitoring, traffic flow optimization, and predictive fault detection across large-scale transportation networks.

![](/img/scenario-transportation-en.png)

## 4. Steel & Metallurgy

### 4.1 **Background**

Facing increasing market competition and stringent environmental regulations, the steel and metallurgy industry is undergoing digital transformation. Industrial IoT platforms play a crucial role in optimizing production efficiency, improving product quality, and reducing energy consumption. Real-time data collection and analysis across smelting equipment, production lines, and supply chains enable intelligent monitoring, predictive maintenance, and precise process control.

### 4.2 **Architecture**

IoTDB’s powerful data storage and computing capabilities provide cross-platform compatibility, lightweight deployment options, and robust integration with industrial automation systems. Its ability to efficiently handle high-frequency time-series data empowers steel and metallurgy enterprises to implement smart manufacturing solutions and accelerate digitalization.

![](/img/scenario-steel-en.png)

## 5. IoT

### 5.1 **Background**

The Internet of Things (IoT) is driving digital transformation across industries by enabling real-time device connectivity and intelligent management. As IoT deployments scale, enterprises require a time-series data management system capable of processing vast data streams from edge devices to the cloud. Ensuring high-performance data storage, fast querying, and reliable synchronization is crucial for applications such as equipment monitoring, anomaly detection, and predictive maintenance.

### 5.2 **Architecture**

As a IoT-native high-performance time-series database, IoTDB supports end-to-end data synchronization and analysis from edge devices to the cloud. With high-concurrency processing capabilities, it meets the demands of large-scale device connectivity. IoTDB provides flexible data solutions to unlock deeper insights from operational data, improve efficiency, and drive comprehensive IoT business growth.

![](/img/scenario-iot-en.png)