<!--

    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.

-->

# IoTDB Introduction

TimechoDB is a low-cost, high-performance native temporal database for the Internet of Things, provided by Timecho based on the Apache IoTDB community version as an original commercial product. It can solve various problems encountered by enterprises when building IoT big data platforms to manage time-series data, such as complex application scenarios, large data volumes, high sampling frequencies, high amount of unaligned data, long data processing time, diverse analysis requirements, and high storage and operation costs.

Timecho provides a more diverse range of product features, stronger performance and stability, and a richer set of utility tools based on TimechoDB. It also offers comprehensive enterprise services to users, thereby providing commercial customers with more powerful product capabilities and a higher quality of development, operations, and usage experience.

- Download 、Deployment and Usage：[QuickStart](../QuickStart/QuickStart_timecho.md)


## 1. Product Components

Timecho products is composed of several components, covering the entire time-series data lifecycle from data collection, data management to data analysis & application, helping users efficiently manage and analyze the massive amount of time-series data generated by the IoT.

<div style="text-align: center;">        		
   <img src="/img/Introduction-en-timecho-new.png" alt="Introduction-en-timecho-new.png" style="width: 70%;"/>

</div>

1. **Time-series database (TimechoDB, a commercial product based on Apache IoTDB provided by the original team)**: The core component of time-series data storage, which can provide users with high-compression storage capabilities, rich time-series query capabilities, real-time stream processing capabilities, while also having high availability of data and high scalability of clusters, and providing security protection. At the same time, TimechoDB also provides users with a variety of application tools for easy management of the system; multi-language API and external system application integration capabilities, making it convenient for users to build applications based on TimechoDB.

2. **Time-series data standard file format (Apache TsFile, led and contributed by core team members of Timecho)**: This file format is a storage format specifically designed for time-series data, which can efficiently store and query massive amounts of time-series data. Currently, the underlying storage files of Timecho's collection, storage, and intelligent analysis modules are all supported by Apache TsFile. TsFile can be efficiently loaded into TimechoDB and can also be migrated out. Through TsFile, users can use the same file format for data management in the stages of collection, management, application & analysis, greatly simplifying the entire process from data collection to analysis, and improving the efficiency and convenience of time-series data management.

3. **Time-series model training and inference integrated engine (AINode)**: For intelligent analysis scenarios, TimechoDB provides the AINode time-series model training and inference integrated engine, which offers a complete set of time-series data analysis tools, with the underlying model training engine supporting training tasks and data management, including machine learning, deep learning, etc. With these tools, users can conduct in-depth analysis of the data stored in TimechoDB and mine its value.

4. **Data collection**: To more conveniently dock with various industrial collection scenarios, Timecho provides data collection access services, supporting multiple protocols and formats, which can access data generated by various sensors and devices, while also supporting features such as breakpoint resumption and network barrier penetration. It is more adapted to the characteristics of difficult configuration, slow transmission, and weak network in the industrial field collection process, making the user's data collection simpler and more efficient.

## 2. Product Features

TimechoDB has the following advantages and characteristics:

- Flexible deployment methods: Support for one-click cloud deployment, out-of-the-box use after unzipping at the terminal, and seamless connection between terminal and cloud (data cloud synchronization tool).

- Low hardware cost storage solution: Supports high compression ratio disk storage, no need to distinguish between historical and real-time databases, unified data management.

- Hierarchical sensor organization and management: Supports modeling in the system according to the actual hierarchical relationship of devices to achieve alignment with the industrial sensor management structure, and supports directory viewing, search, and other capabilities for hierarchical structures.

- High throughput data reading and writing: supports access to millions of devices, high-speed data reading and writing, out of unaligned/multi frequency acquisition, and other complex industrial reading and writing scenarios.

- Rich time series query semantics: Supports a native computation engine for time series data, supports timestamp alignment during queries, provides nearly a hundred built-in aggregation and time series calculation functions, and supports time series feature analysis and AI capabilities.

- Highly available distributed system: Supports HA distributed architecture, the system provides 7*24 hours uninterrupted real-time database services, the failure of a physical node or network fault will not affect the normal operation of the system; supports the addition, deletion, or overheating of physical nodes, the system will automatically perform load balancing of computing/storage resources; supports heterogeneous environments, servers of different types and different performance can form a cluster, and the system will automatically load balance according to the configuration of the physical machine.

- Extremely low usage and operation threshold: supports SQL like language, provides multi language native secondary development interface, and has a complete tool system such as console.

- Rich ecological environment docking: Supports docking with big data ecosystem components such as Hadoop, Spark, and supports equipment management and visualization tools such as Grafana, Thingsboard, DataEase.

## 3. Enterprise characteristics

### 3.1 Higher level product features

Based on Apache IoTDB, TimechoDB offers a range of advanced product features, with native upgrades and optimizations at the kernel level for industrial production scenarios. These include multi-level storage, cloud-edge collaboration, visualization tools, and security enhancements, allowing users to focus more on business development without worrying too much about underlying logic. This simplifies and enhances industrial production, bringing more economic benefits to enterprises. For example:


- Dual Active Deployment：Dual active usually refers to two independent single machines (or clusters) that perform real-time mirror synchronization. Their configurations are completely independent and can simultaneously receive external writes. Each independent single machine (or clusters) can synchronize the data written to itself to another single machine (or clusters), and the data of the two single machines (or clusters) can achieve final consistency.

- Data Synchronisation：Through the built-in synchronization module of the database, data can be aggregated from the station to the center, supporting various scenarios such as full aggregation, partial aggregation, and hierarchical aggregation. It can support both real-time data synchronization and batch data synchronization modes. Simultaneously providing multiple built-in plugins to support requirements such as gateway penetration, encrypted transmission, and compressed transmission in enterprise data synchronization applications.

- Tiered Storage：Multi level storage: By upgrading the underlying storage capacity, data can be divided into different levels such as cold, warm, and hot based on factors such as access frequency and data importance, and stored in different media (such as SSD, mechanical hard drive, cloud storage, etc.). At the same time, the system also performs data scheduling during the query process. Thereby reducing customer data storage costs while ensuring data access speed.

- Security Enhancements: Features like whitelists and audit logs strengthen internal management and reduce the risk of data breaches.

The detailed functional comparison is as follows：

<table style="text-align: left;">
  <tbody>
     <tr>            <th colspan="2">Function</th>
            <th>Apache IoTDB</th>        
            <th>TimechoDB</th>
      </tr>
      <tr>
            <td rowspan="4">Deployment Mode</td>  
            <td>Stand-Alone Deployment</td> 
            <td>√</td> 
            <td>√</td> 
      </tr>
      <tr>
            <td>Distributed Deployment</td> 
            <td>√</td> 
            <td>√</td> 
      </tr>
      <tr>
            <td>Dual Active Deployment</td> 
            <td>-</td> 
            <td>√</td> 
      </tr>
       <tr>
            <td>Container Deployment</td> 
            <td>Partial support</td> 
            <td>√</td> 
      </tr>
      <tr>
            <td rowspan="13">Database Functionality</td>  
            <td>Sensor Management</td> 
            <td>√</td> 
            <td>√</td>       
      </tr>
      <tr>
            <td>Write Data</td> 
            <td>√</td> 
            <td>√</td>        
      </tr>
      <tr>
            <td>Query Data</td> 
            <td>√</td> 
            <td>√</td>
      </tr>
      <tr>
            <td>Continuous Query</td> 
            <td>√</td> 
            <td>√</td>
      </tr>
      <tr>
            <td>Trigger</td> 
            <td>√</td> 
            <td>√</td>
      </tr>
      <tr>
            <td>User Defined Function</td> 
            <td>√</td> 
            <td>√</td>
      </tr>
      <tr>
            <td>Permission Management</td> 
            <td>√</td> 
            <td>√</td>
      </tr>
      <tr>
            <td>Data Synchronisation</td> 
            <td>Only file synchronization, no built-in plugins</td> 
            <td>Real time synchronization+file synchronization, enriched with built-in plugins</td>
      </tr>
      <tr>
            <td>Stream Processing</td> 
            <td>Only framework, no built-in plugins</td> 
            <td>Framework+rich built-in plugins</td>
      </tr>
      <tr>
            <td>Tiered Storage</td> 
            <td>-</td> 
            <td>√</td>
      </tr>
      <tr>
            <td>View</td> 
            <td>-</td> 
            <td>√</td>
      </tr>
      <tr>
            <td>White List</td> 
            <td>-</td> 
            <td>√</td>
      </tr>
      <tr>
            <td>Audit Log</td> 
            <td>-</td> 
            <td>√</td>
      </tr>
      <tr>
            <td rowspan="3">Supporting Tools</td>  
            <td>Workbench</td> 
            <td>-</td> 
            <td>√</td>       
      </tr>
      <tr>
            <td>Cluster Management Tool</td> 
            <td>-</td> 
            <td>√</td>
      </tr>
      <tr>
            <td>System Monitor Tool</td> 
            <td>-</td> 
            <td>√</td>
      </tr>
      <tr>
            <td>Localization</td>  
            <td>Localization Compatibility Certification</td> 
            <td>-</td> 
            <td>√</td>       
      </tr>
      <tr>
            <td rowspan="2">Technical Support</td>  
            <td>Expert Support</td> 
            <td>-</td> 
            <td>√</td>       
      </tr>
      <tr>
            <td>Use Training</td> 
            <td>-</td> 
            <td>√</td>
      </tr>
</tbody>
</table>

### 3.2 More efficient/stable product performance

TimechoDB has optimized stability and performance on the basis of the open source version. With technical support from the enterprise version, it can achieve more than 10 times performance improvement and has the performance advantage of timely fault recovery.

### 3.3 More User-Friendly Tool System

TimechoDB will provide users with a simpler and more user-friendly tool system. Through products such as the Cluster Monitoring Panel (Grafana), Database Console (Workbench), and Cluster Management Tool (Deploy Tool, abbreviated as IoTD), it will help users quickly deploy, manage, and monitor database clusters, reduce the work/learning costs of operation and maintenance personnel, simplify database operation and maintenance work, and make the operation and maintenance process more convenient and efficient.

- Cluster Monitoring Panel: Designed to address the monitoring issues of TimechoDB and its operating system, including operating system resource monitoring, TimechoDB performance monitoring, and hundreds of kernel monitoring indicators, to help users monitor the health status of the cluster and perform cluster tuning and operation.

<div style="display: flex; justify-content: space-between; width: 100%;">
  <p style="width: 30%; text-align: center;">Overall Overview</p>
  <p style="width: 30%; text-align: center;">Operating System Resource Monitoring</p>
  <p style="width: 30%; text-align: center;">TimechoDB Performance Monitoring</p>
</div>
<div style="display: flex; justify-content: space-between; width: 100%;">
  <img src="/img/Introduction01.png" alt="" style="width: 30%; height: auto;">
  <img src="/img/Introduction02.png" alt="" style="width: 30%; height: auto;">
  <img src="/img/Introduction03.png" alt="" style="width: 30%; height: auto;">
</div>
<p></p>

- Database Console: Designed to provide a low threshold database interaction tool, it helps users perform metadata management, data addition, deletion, modification, query, permission management, system management, and other operations in a concise and clear manner through an interface console, simplifying the difficulty of database use and improving database efficiency.


<div style="display: flex; justify-content: space-between; width: 100%;">
  <p style="width: 30%; text-align: center;">Home Page</p>
  <p style="width: 30%; text-align: center;">Operate Metadata</p>
  <p style="width: 30%; text-align: center;">SQL Query</p>
</div>
<div style="display: flex; justify-content: space-between; width: 100%;">
  <img src="/img/Introduction04.png" alt="" style="width: 30%; height: auto;">
  <img src="/img/Introduction05.png" alt="" style="width: 30%; height: auto;">
  <img src="/img/Introduction06.png" alt="" style="width: 30%; height: auto;">
</div>
<p></p>


- Cluster management tool: aimed at solving the operational difficulties of multi node distributed systems, mainly including cluster deployment, cluster start stop, elastic expansion, configuration updates, data export and other functions, so as to achieve one click instruction issuance for complex database clusters, greatly reducing management difficulty.


<div style="text-align: center;">        		
    <img src="/img/introduction-opskit-en.png" alt=" " style="width: 50%;"/>
</div>

### 3.4 More professional enterprise technical services

TimechoDB customers provide powerful original factory services, including but not limited to on-site installation and training, expert consultant consultation, on-site emergency assistance, software upgrades, online self-service, remote support, and guidance on using the latest development version. At the same time, in order to make TimechoDB more suitable for industrial production scenarios, we will recommend modeling solutions, optimize read-write performance, optimize compression ratios, recommend database configurations, and provide other technical support based on the actual data structure and read-write load of the enterprise. If encountering industrial customization scenarios that are not covered by some products, TimechoDB will provide customized development tools based on user characteristics.

Compared to the open source version, TimechoDB provides a faster release frequency every 2-3 months. At the same time, it offers day level exclusive fixes for urgent customer issues to ensure stable production environments.

### 3.5 More compatible localization adaptation

The TimechoDB code is self-developed and controllable, and is compatible with most mainstream information and creative products (CPU, operating system, etc.), and has completed compatibility certification with multiple manufacturers to ensure product compliance and security.