IoTDB (Internet of Things Database) is a specialized database management system for time series data generated by network of IoT devices with low computational power. It targets at workload that has high-frequency of data write, large-volume data storage, and complex analytical queries.
- Website
- https://iotdb.apache.org[01]
- Source Code
- https://github.com/apache/iotdb[02]
- Developer
- Country of Origin
- CN
- Start Year
- 2017 [13]
- Project Types
- Academic, Open Source
- Written in
- Java
- License
- Apache v2
IoTDB (Internet of Things Database) is a specialized database management system for time series data generated by network of IoT devices with low computational power. It targets at workload that has high-frequency of data write, large-volume data storage, and complex analytical queries.
History[04]
IotDB is a project started in 2017 by Prof. Jianmin Wang’s group in School of Software of Tsinghua University and China’s National Engineering laboratory for Big Data Software. The project entered incubation by Apache Incubator on Nov. 18th, 2018. The project evolves from a prior project of the same group called TsFile. TsFile is a columnar storage format optimized for storing time series data. IoTDB uses TsFile as its underlying storage format.
Concurrency Control[07][08]
As IoTDB does not support transaction, it has a bare-bone concurrency control implementation with read locks and write locks. Their implementation does not follow a Two-Phase Locking protocol, as there are cases where a lock is acquired after another lock is released previously in the same function, and example is included in citation 1 of this section. IoTDB uses Java's native ReentrantReadWriteLock in the implementation.
To avoid access conflict when concurrently reading or writing to user or role, IoTDB has HashLock implemented for user manager and lock manager. A HashLock lock is a wrapper around a fixed number of ReentrantReadWriteLock locks. By default, it initializes with an array of 100 ReentrantReadWriteLock locks. Each applicable database object corresponds to one lock in the array, according to hash value of the object. This avoids conflicts resulted from concurrent access of same database object, user or role in this case, while in the same time limit the amount of resource needed to managing those locks.
Logging[09]
Physical query plans are serialized and stored as logs. Write-Ahead-Logging with only REDO records.
System Architecture
The overall IoTDB follows a client-server architecture. IoTDB client resides in the sensors(IoT devices) of the system, handling data collection and sending data to IoTDB server. Client can sync its data collected every user-configured interval with the server using Sync Tool; this allows data collected by the sensor to constantly being persisted in server, where the data can then be used for native query or shipped to other open-source platform for data analysis. Currently support single node server deployment. The group is working in progress to support shared-nothing cluster. IoTDB currently supports writing to HDFS.
Citations
13 sources- IoTDB Website apache.org
- GitHub - apache/iotdb: Apache IoTDB · GitHub github.com
- IoTDB Website apache.org
- IoTDBProposal - INCUBATOR - Apache Software Foundation apache.org
- IoTDB Website apache.org
- IoTDB Website apache.org
- https://github.com/apache/iotdb/blob/master/server/src/main/java/org/apache/iotdb/db/engine/storagegroup/StorageGroupProcessor.java#L1068 github.com
- https://github.com/apache/iotdb/blob/master/server/src/main/java/org/apache/iotdb/db/concurrent/HashLock.java github.com
- https://github.com/apache/iotdb/blob/master/server/src/main/java/org/apache/iotdb/db/writelog/node/WriteLogNode.java#L37 github.com
- IoTDB Website apache.org
- https://github.com/apache/iotdb/blob/master/server/src/main/java/org/apache/iotdb/db/engine/modification/Modification.java github.com
- https://github.com/apache/iotdb/blob/master/server/src/main/java/org/apache/iotdb/db/engine/modification/io/ModificationWriter.java github.com
- #ACEU19: Apache IoTDB: Time Series Database for Industrial IoT - YouTube youtube.com