时间序列数据存储:RDBMS与NoSQL

时间:2018-10-29 10:49:59

标签: database nosql time-series bigdata relational-database

这些天来,我面临着存储一些时间序列数据的问题。

此数据来自工业机器:对于每个作业(每小时3个,24 / 24h),一个软件记录:

  • 油压;
  • 油温;
  • 一些振动数据。

振动数据是在非常高的频率(> 10 kHz)下获取的,因此会导致非常大的内存需求。这个问题使我的公司评估了有效存储此数据的一些可能性。

插入不会很频繁(当机器不工作时,每天可能插入1到2次)。 读取可能非常频繁(另一个软件将检索数据以进行绘图和分析)。

目前,单个节点将用于存储数据,所以我暂时不希望考虑分区和并行化问题。

我应该选择哪种解决方案? 是关系型DBMS(例如MySQL或PostgreSQL),还是通用的NoSQL DB(例如,面向列的数据库-考虑所有时间序列都是单变量的,例如Cassandra,或者面向文档的数据库,例如MongoDB)?

除了我的特定用例之外,通常在什么时候使用RDMBS而不是NoSQL进行时间序列存储?什么时候比RDBMS更喜欢NoSQL?

1 个答案:

答案 0 :(得分:1)

通常,关于此主题,网络上有很多内容。通常,在关系数据库中,原理图是“ upfront” -尽管它可以随时间变化,但它是静态的。

大多数Not-only-Sql的最大“好处” 是它们:

  • 不需要固定的原理图和固定的关系来保持数据一致性。这意味着-例如图形数据库-您可以更轻松,更灵活地与其他对象建立联系。
  • 设计使之能够(更好)水平缩放,这在较大的系统中,对于解决与性能相关的问题有很大的好处。
  • 数据不需要(非常)结构化。如果您需要在数据库中包括外部数据源或典型的非结构化数据,这又是一个好处。

注意::有多种NoSql dtabase类型,它们都具有不同的方法以及它们自己的por和con。


所以:

  

除了我的特定用例之外,通常在什么时候使用RDMBS而不是NoSQL进行时间序列存储?

使用RDMBS时,至少需要-预先了解原理图,并且原理图不会经常更改。

在以下情况下,您更喜欢RDMBS:

  • 这种结构化数据和一致性检查是要存储的数据的固有属性。例如:维护仓库库存清单,跟踪工作时间等。
  • 您的数据存储可以看作是一个孤立的机构。例如:文件系统索引器或产品测试结果存储。
  

什么时候比RDBMS更喜欢NoSQL?

如果满足以下条件,则您更喜欢NoSql

  • 您无法预先确定所有关系,并希望经常添加数据,源和关系。典型的用例是大数据存储,关系存储;更具体:社交网络,高级统计相关性或经常变化的外部数据提供者。
  • 您需要高度可扩展性,这在大多数NoSql系统中更为自然。

关于您的用例:

您的数据结构似乎是众所周知的且已修复。这请求建立一个关系数据库。

对于高负载:数据结构也是预先已知的。尽管如此,还是有一些陷阱来应对高负载。可以配置一个关系数据库以应付这个数量并表现得很好。

那么,别的-很好的体验-我看不出有很强的理由支持NoSql(尽管我可能会缺少[性能]之类的东西)。

另一方面,它的确提出了另一个问题:由于您监视的是24/7;您多久需要上一年或前一年的数据?上个月还是上周?

我只是问,因为有更多选择可以应对这些数据量。历史数据通常被视为日志,并且仅“现在”请求。在这种情况下,您可以将数据存储卡存储在不同的服务器上,甚至可以以不同的形式存储。例如,10kHz振动数据也可以以blob的形式存储在专用服务器上,或者存储数据流。