为什么我应该使用时序数据库?
作者:Katy Farmer / 产品,用例,开发者
2018年3月1日
导航至
时序数据非常特殊——不仅在于其捕获的独特数据,还在于我们与之交互的方式。也许你正在开始使用你公司恒温器中的传感器(以最终证明爸爸晚上在降低温度)或分析历史数据以预测市场价格。你做得非常出色。
但是,随着新的数据类型的出现,也带来了新的责任。时序数据是短暂且庞大的,也就是说,它快速出现且数量庞大。这要求我们在存储和检索方面与其他类型的数据考虑有所不同。如果你要从关系型数据库中的一个表中检索一个用户,你可以通过你的模式中的任何数量的属性进行查询:ID、姓氏、名字、地球、风、火的 favorite member。如果你想确切地知道你的无人机(别名:Skynosaur)何时发送了坐标回家,你也可以做到这一点。但不是没有一些权衡。
何时使用时序数据库
许多公司和个人成功地将时序数据存储在其他类型的数据库(关系型、NoSQL)中。如果你是其中之一,你很快乐,而且你目前没有任何问题,我不会要求你改变。你做你的。
然而,使用专门为时序数据设计的数据库确实有明确的优点。
可伸缩性
可伸缩性是那些我们经常听到并且有时使用正确的神奇词汇之一。时序数据在时序数据库之外进行扩展的一般问题是这样的:如果Skynosaur飞行1500小时(商业飞行员执照的最少小时数),我们已经为单个设备收集了超过一百万个数据点。Skynosaur(Skynosaurus Rex,Inc.)的制造商可能有数千个设备正在发送数据回家。在关系型数据库中进行时间戳查询将涉及数百万行数据。
人们经常声称SQL数据库扩展性不好,而NoSQL数据库则不然,但对我来说,用ACID与BASE来理解这一点更为容易。为了不公平地总结,ACID兼容的数据库关注于保证有效性——数据应该是原子性、一致性、隔离性和持久性。BASE模型允许我们为了速度、可扩展性或任何我们想要优先考虑的事情而放弃一些ACID原则。为了决定哪个系统适用,我们需要确定我们数据库的主要用途。
如果我们不关心数据的持久性,我们可以编写不需要刷新到磁盘的命令(这意味着数据可能不会在重新启动后幸存)。如果我们不关心原子性,我们可以缩短数据集被锁定的时间。时间序列数据库通过提供适合时间序列数据的原则来平衡ACID/BASE的关系。
例如,时间序列数据作为整体比作为单个点更有价值,因此数据库知道它可以为了更高的写入次数而牺牲持久性。Skynosaur每五秒钟发送一次数据,所以如果我们丢失了1500小时的飞行时间中的某些数据点,我们的整体趋势仍然完好。
在这种情况下,可扩展性意味着时间序列数据库专注于更多的写入次数和最终一致性,即使在分布式存储中也是如此,这种特性意味着对那些关心这些数据的人来说,担忧减少。
可用性
如果我们的所有数据都生活在一个安全、持久的黑盒子里,我们可以轻松地呼吸。但如何访问数据可能与其存储一样重要。每个数据库都有自己的查询语言,旨在尽可能高效地访问内容。请记住,因为我们前面提到,时间序列数据是特殊的。它是一个带有时标的彩虹。
再次想象Skynosaurs大军向Skynosaurus Rex总部发送数据。有数百万个数据点需要搜索,但现在我们有一个为手头任务构建的查询语言——不是为了查看数据与模式其他部分的关联,而是为了在时间上下文中查看数据,以便进行聚合、设置窗口或查看趋势。这并不是关于其他数据库是否能够做到这一点的问题,而是关于我们如何选择使用我们的资源。
权衡
数据库架构是关于权衡和优先级的。你需要速度还是准确性或数量或预定义的架构?证明在于基准测试。衡量一切。不要选择一个工具或产品——选择解决你问题的解决方案。专用工具是为了解决特定问题而制作的,因此时间序列数据库是为了时间序列问题而优化的。