Official Website | Docs | Contribution Guide
OpenGemini is an open-source time-series database that can be widely used in IoT, Internet of Vehicles(IoV), O&M monitoring, and industrial Internet scenarios. It has excellent read/write performance and efficient data analysis capabilities. It uses an SQL-like query language, does not rely on third-party software, and is easy to install, deploy, and maintain. We encourage contribution and collaboration to the community.
- High-performance read and write
- 10-million-scale concurrent writes of metrics per second
- Millisecond-level response for querying tens of thousands of sensors data
- Supports time-series data analysis
- Built-in AI data analysis algorithm
- Supports real-time abnormality detection and prediction of time-series data
- Ecosystem compatibility
- Compatible with InfluxDB line protocol and Influxql
- Seamless integration with existing InfluxDB toolchain
- Supports promethus remote read/write API
- Efficient management of massive time series data
- Supports 100-million-scale time series management
- Built-in efficient data compression algorithm, with a storage cost of only 1/20 compared to traditional databases
- Distributed
- Provides horizontal scalability and supports hundreds of nodes in a cluster
- Flexible deployment
- Runs the executable binary files without external dependencies
- All the configuration is done with reasonable defaults
- Supports single-node and cluster deployment
currently openGemini only supports Linux OS, and supports InfluxDB ecosystem toolchains, such as:
Drivers: JavaScript, Java, C/C++, Ruby, Go, Python, PHP
Client: Influx
Data access tools: StatsD, EMQ, Telegraf, Icinga2, HiveMQ, Kafka, MQTT
Data insight tools: Chronograf, Grafana
Big data and data analysis systems: Zeppelin, Flink, Spark, Kapacitor, etc.
For a more detailed introduction, please visit our official website User Guide
This section mainly contains the following:
- How to compile openGemini source code
- How to run openGemini
GO version v1.16+
Python version v2.7+
How to set GO environment variables
Open ~/.profile configuration file and add the following configurations to the end of the file:
export GOPATH=/path/to/dir
export GOBIN=$GOPATH/bin
export GO111MODULE=on
export GONOSUMDB=*
export GOSUMDB=off
- Clone source codes from Github
> cd $GOPATH
> mkdir -p {pkg,bin,src}
> cd src
> git clone https://github.com/openGemini/openGemini.git
- Enter the home directory
> cd openGemini
- Compiling
> export CGO_LDFLAGS="-Wl,-z,now -Wl,-z,relro -Wl,-z,noexecstack -fPIE -ftrapv"
> export CGO_CFLAGS="-fstack-protector-strong -D_FORTIFY_SOURCE=2 -O2"
> python build.py
The compiled binary file is in the build directory
> ls build
ts-meta ts-server ts-sql ts-store
The configuration file is in the conf directory. For more information about the configuration items, please refer to User Guide --> Configuration Files
Standalone operation
> cd openGemini
> mkdir -p /tmp/openGemini
> sh scripts/install.sh
Refer to cluster deployments in User Guide
Use the client to connect to openGemini
> influx -host 127.0.0.1 -port 8086
After successful login, the following message will be displayed
> influx -host 127.0.0.1 -port 8086
WARN: Connected to http://127.0.0.1:8086, but found no server version.
Are you sure an InfluxDB server is listening at the given address?
InfluxDB shell version: 1.8.3
>
Create a database
> create database sensordb
> use sensordb
The openGemini supports three ways for creating a measurement.
- Implicit creation, automatic creation measurement when data is written. By default, partition is based on time.
- explicit creation, without specifying the partition key, as the same as implicit creation.
> create measurement sensor
- explicit creation, specifying partition keys during table creation, During data storage, the table will be primarily partitioned by time, and then secondarily partitioned according to the specified partition keys.
> create measurement sensor with shardkey farmID
Write data
> insert sensor,farmID="001",device="110" sensorId="s20",value=50.98
Query data
> select * from sensor
name: sensor
time device farmID sensorId value
---- ------ ------ -------- -----
1664285811060281356 "110" "001" s20 50.98
openGemini is licensed under the Apache License 2.0. Refer to LICENSE for more details.