工业数据存储数据库选型比较

时间:2024-03-16 07:43:28

我们将工业互联网、工业大数据首先需要把数据从工业现场采集上来,这是第一步也是基础。

海量的数据从工业现场采集之后存在哪里呢?使用什么样的存储方式对后面的数据分析和计算有重要影响。

这里对数据库方式的存储进行了一个选型比较。

当前的数据库按类型分可以分为实时数据库,时序数据库,NoSQL数据库,关系型数据库。

实时数据库是工业领域长时间以来的数据存储方式,很多传统的工业软件厂商都提供实时数据库。今年来,随着物联网的发展,时序数据库的应用也越来越广。

 

1 实时数据库一般具备的特点

  1. 高速写入的能力:工业实时数据库通常会对写入的速度有很高的要求。以流程工业的场景为例,每个环节都会设置传感器,每个传感器的采集频率都很高,所以写入的并发量会特别大,有时甚至会要求每秒上百万的测点。所以除了对软件的要求之外,也会选用一些高性能的服务器。
  2. 快速查询的能力:查询的需求分为两块,一是要响应实时的查询请求,用于及时反映系统的状态;二是历史数据也要能快速被查询,由于历史数据的量非常大,在查询时需要对特定时间段的数据做聚合,需要做到即使是查一整年的数据情况,也能很快的反应出来。
  3. 超强数据压缩能力:上面提到监控数据会被存储很长时间,5年甚至是10年都是常有的事,在存储容量有限的情况下,就需要对数据做一定的压缩,通常压缩方式会分成无损压缩和有损压缩,相比而言,有损压缩的压缩比会更大一些,有时甚至会达到1:30-40,这就需要设计合理的算法来保留数据中的细节,使数据在还原后仍能保留重要的特征。
  4. 积累丰富的工具:传统的实时数据库的解决方案一般是从采集开始到直可视化的一整套系统,有多年积累形成的丰富的工具包,比如会积攒上百种的协议,或者各种场景的数据模型,这些都是工业软件的重要竞争力。
  5. 追求极致稳定:工业上对软件的稳定性要求特别高,除了用主备来保证高可用外,完全由软件的质量来保证程序的持续运行,工程师会自豪地拍胸脯保证软件跑十年也不会出错。

2 时序数据库特点

1. 单条数据不会很长,但是数据量很大

2. 它们都带有时间戳,且按顺序生成

3. 数据大部分都是结构化的,用于描述某个参数在某个时间点的特征

4. 写入的频率会比查询的频率高很多

5. 已存储的数据很少有更新的需求

6. 用户会更关心一段时间的数据特征,而不是某一个时间点

7. 数据的查询分析大多基于某一个时间段或者某个数值范围

8. 需要进行统计和可视化的展示

3 选型分析

这里分别选择从一个类型中选择一个代表进行选型比较。

时序数据库选择InfluxDB,这是当前排名最高的时序数据库;

NoSQL数据库选择MongoDB,这也是当前排名最高的非关系型数据库;

关系型数据库选择PostgreSQL。为什么没有选mysql,主要还是从开放性考虑,在功能和性能上PostgreSQL和mysql都非常好,基本差别不大,但是Mysql属于Oracle之后,能否一致保持开源特性让人担忧,PostgreSQL则完全没有这方面的担心。

图一是截止2020.10的数据库的最新排名。

工业数据存储数据库选型比较

                       图1:数据库排名(截止2020.10) https://db-engines.com/en/ranking

 

                                                                                                                  表1:数据库分项比较

Name

InfluxDB

MongoDB

PostgreSQL

Description

DBMS for storing time series, events and metrics

One of the most popular document stores available both as a fully managed cloud service and for deployment on self-managed infrastructure

Widely used open source RDBMS

Primary database model

Time Series DBMS

Document store

Relational DBMS

Secondary database models

 

Search engine

Document store

DB-Engines Ranking

Score:24.15

Rank:

#28 Overall

#1 Time Series DBMS

Score:448.02

Rank:    

#5 Overall

#1 Document stores

Score:542.40

Rank:

#4 Overall

#4 Relational DBMS

Trend Chart

工业数据存储数据库选型比较

License

MIT-License; commercial enterprise version available

MongoDB Inc.'s Server Side Public License v1. Prior versions were published under GNU AGPL v3.0. Commercial licenses are also available.

BSD

Implementation language

Go

C++

C

Server operating systems

Linux

OS X

Linux

OS X

Solaris

Windows

FreeBSD

HP-UX

Linux

NetBSD

OpenBSD

OS X

Solaris

Unix

Windows

Data scheme

schema-free

schema-free

         yes

Typing

Numeric data and Strings

yes

yes

XML support

no

 

yes

Secondary indexes

no

yes

yes

SQL

SQL-like  query language

Read-only SQL queries via the MongoDB Connector for BI

yes

APIs and other access methods

HTTP API

JSON over UDP

proprietary protocol using JSON

ADO.NET

JDBC

native C library

ODBC

streaming API for large objects

Supported programming languages

.Net

Clojure

Erlang

Go

Haskell

Java

JavaScript

JavaScript (Node.js)

Lisp

Perl

PHP

Python

R

Ruby

Rust

Scala

 

(don’t support C++)

Actionscript info

C

C#

C++

Clojure info

ColdFusion info

D info

Dart info

Delphi info

Erlang

Go

Groovy info

Haskell

Java

JavaScript

Lisp info

Lua info

MatLab info

Perl

PHP

PowerShell info

Prolog info

Python

R info

Ruby

Rust

Scala

Smalltalk info

Swift

.Net

C

C++

Delphi

Java info

JavaScript (Node.js)

Perl

PHP

Python

Tcl

Triggers

no

yes(in MongoDB Atlas only)

yes

Partitioning methods

Sharding

(enterprise version only)

Sharding

partitioning by range, list and (since PostgreSQL 11) by hash

Replication methods

selectable replication factor

(enterprise version only)

Multi-Source deployments with MongoDB Atlas Global Clusters

Source-replica replication

Source-replica replication

MapReduce

no

yes

no

Consistency concepts

 

Eventual Consistency

Immediate Consistency

Immediate Consistency

Foreign keys

no

no

yes

Transaction concepts

no

Multi-document ACID Transactions with snapshot isolation

ACID

Concurrency

yes

yes

yes

Durability

yes

yes

yes

In-memory capabilities

yes

(Depending on used storage engine)

yes

no

Access control

simple rights management via user accounts

Access rights for users and roles

fine grained access rights according to SQL-standard

4 结论

数据库

优势

劣势

InfluxDB

时序数据库

schema-free

官方不提供C++ API,需要自己封装;(https://github.com/awegrzyn/influxdb-cxx)

单机版,不支持集群

MongoDB

schema-free,

提供C++ API

支持集群

没有时序,需要自己实现

PostgreSQL

提供C++ API

支持集群

has schema,table can not change.

没有时序,需要自己实现

https://github.com/timescale/timescaledb

只针对开源版本来说,Influxdb不支持集群,集群和高可靠用需要自己设计实现方案,在生产环境下不是最佳选择,如果不考虑这个方面或者可以购买企业版的话,influxdb是不错的选择。

PostgreSQL 在有了timescaledb 之后具备了时序数据库的功能,同时又天然支持集群和高可用方案,很好的选择。

MongoDB需要自己设计时序方案,稍显麻烦了,如果技术实力可以的话,也是一个选择。