我需要建立一个记录时序数据(传感器)的数据库。我的一位朋友建议我使用NoSQL数据库,而不是使用Oracle (例如)。
还有一些文章推荐同样的方法:参见安德鲁·奥利弗的文章。
为什么不方便在Oracle (或任何其他关系数据库)中记录时间序列?你能帮我举个例子吗?
发布于 2015-08-22 21:20:17
Oracle是一个SQL DBMS,而不是真正的关系数据库。它实现了一个SQL的变体作为其数据的逻辑模型。它的体系结构是20世纪70年代末按照与IBM系统R相同的思路开发的,这是一个基于关系模型的数据库管理系统的初步实现,使用的是SQL作为数据子语言。为了理解SQL和Oracle与关系不一样,这一简短的背景是必要的。由科德定义并由日期等研究人员进一步发展的关系模型是一种纯粹的数据逻辑模型,其中数据将被表示为关系,定义了一个关系代数来操作关系,以及一个数据完整性组件,使数据库管理系统能够维护与其真实世界意图相一致的数据。关系模型在DBMS的实现上是静默的。因此,当确定给定的SQL DBMS仅仅由于性能原因不能很好地处理的用例时,问题在于实现,而不是关系模型。
鉴于此,我怀疑NoSQL解决方案有时会被推荐而不是SQL的时间序列分析,因为时间序列分析是一个非常狭窄的用例,而SQL体系结构是针对更广义的在线事务处理用例的。我对时间序列分析知之甚少,但我确实认识到,它纯粹是分析性的,而不是OLTP,因此在这种用例中,事务支持-- SQL DBMS的一个支柱,但与关系模型正交--是纯粹的开销。我记得几年前看到过迈克尔·斯通布雷克讨论时间序列分析,并认为解决方案是将数据存储在数组中而不是行中。由于所有的SQL DBMS都是行存储区,这可能是推荐其他解决方案的另一个原因。
我要提醒您不要直接跳入NoSQL解决方案。这些系统比传统的DBMS系统要成熟得多。其次,我认为时间序列分析是相当繁重的统计数据,您可能需要自己使用NoSQL解决方案来添加这些数据。像Oracle这样成熟的SQL DBMS可能有一些内置的统计特性,更易于使用。第三,尽管SQL存在缺陷,但它是一种完整的查询语言,可以让您编写任意复杂的查询。大多数NoSQL解决方案要求您编写程序来执行所需的分析。最后,也许最重要的是,为了从时间序列数据中获取任何有用的信息,您需要用其他相关数据来“丰富”它。例如,我在一家电力公司工作,在这个行业中,仅仅拥有大量的时间序列数据,说明在一段时间间隔内使用了多少电量并不是非常有用的,除非你可以将它与天气、人口统计等联系起来。SQL DBMS,正是因为它是一种通用的数据管理解决方案,使得这很容易。您可以将时间序列数据与丰富数据放在同一个数据库中,并具有SQL的全部功能来连接和分析它。使用NoSQL解决方案,您必须自己执行丰富操作,这是一个额外的步骤--可能会从最初不用于存储时间序列数据的SQL中提取、转换和加载数据!编写ETL程序将是一项额外的工作,您必须在编写这些程序时决定哪些数据对分析有用。如果您后来发现您没有所有有用的东西,那么现在您必须编写更多的程序。如果您将时间序列数据与所有其他数据一起放置在Oracle中,那么它已经就位,一旦您发现需要就可以进行分析。
最后,我要说的是,除非能够证明您有如此之多的数据以超过现有SQL安装的能力,而且您有时间和技能在NoSQL解决方案之上编写额外的基础设施(当然,假设您选择的NoSQL解决方案确实具有扩展到数据体积和速度的能力),您最好还是坚持使用SQL。
https://dba.stackexchange.com/questions/39891
复制相似问题