这些天来,我面临着存储一些时间序列数据的问题。
此数据来自工业机器:对于每个作业(每小时3个,24 / 24h),一个软件记录:
振动数据是在非常高的频率(> 10 kHz)下获取的,因此会导致非常大的内存需求。这个问题使我的公司评估了有效存储此数据的一些可能性。
插入不会很频繁(当机器不工作时,每天可能插入1到2次)。 读取可能非常频繁(另一个软件将检索数据以进行绘图和分析)。
目前,单个节点将用于存储数据,所以我暂时不希望考虑分区和并行化问题。
我应该选择哪种解决方案? 是关系型DBMS(例如MySQL或PostgreSQL),还是通用的NoSQL DB(例如,面向列的数据库-考虑所有时间序列都是单变量的,例如Cassandra,或者面向文档的数据库,例如MongoDB)?
除了我的特定用例之外,通常在什么时候使用RDMBS而不是NoSQL进行时间序列存储?什么时候比RDBMS更喜欢NoSQL?
答案 0 :(得分:1)
通常,关于此主题,网络上有很多内容。通常,在关系数据库中,原理图是“ upfront” -尽管它可以随时间变化,但它是静态的。
大多数Not-only-Sql的最大“好处” 是它们:
注意::有多种NoSql dtabase类型,它们都具有不同的方法以及它们自己的por和con。
除了我的特定用例之外,通常在什么时候使用RDMBS而不是NoSQL进行时间序列存储?
使用RDMBS时,至少需要-预先了解原理图,并且原理图不会经常更改。
在以下情况下,您更喜欢RDMBS:
什么时候比RDBMS更喜欢NoSQL?
如果满足以下条件,则您更喜欢NoSql
:关于您的用例:
您的数据结构似乎是众所周知的且已修复。这请求建立一个关系数据库。
对于高负载:数据结构也是预先已知的。尽管如此,还是有一些陷阱来应对高负载。可以配置一个关系数据库以应付这个数量并表现得很好。
那么,别的-很好的体验-我看不出有很强的理由支持NoSql(尽管我可能会缺少[性能]之类的东西)。
另一方面,它的确提出了另一个问题:由于您监视的是24/7;您多久需要上一年或前一年的数据?上个月还是上周?
我只是问,因为有更多选择可以应对这些数据量。历史数据通常被视为日志,并且仅“现在”请求。在这种情况下,您可以将数据存储卡存储在不同的服务器上,甚至可以以不同的形式存储。例如,10kHz振动数据也可以以blob的形式存储在专用服务器上,或者存储数据流。