重新定义数据库历史时刻

17-03-22 banq
              

Apache Kafka卡夫卡是无可争议的游戏改变者。它是真正数据库分水岭技术。

MySQL数据库目前很流行数据库,在2000-2010年蓬勃发展,由于其巨大的人气,MySQL帮助刺激了2008-2009年的NoSQL的崛起。数据库历史到了一个新的时刻:传统的关系数据库技术终于被完全崭新的一代所取代。

NoSQL如今解释为“Not only SQL”而不是排斥SQL。现在要回答的问题是:需要有新一代的数据存储的必要吗?或许老的关系数据库改善一下就能消灭下一代数据技术呢?

我强烈认为,答案是否定的。一些趋势表明数据库技术正在出现的历史性转变。

新一代通用数据库

关系数据库和SQL都是痛苦的。SQL这种语言会导致很多问题。它掩盖了无意义的逻辑,如三值真理( tri-valued truth),它会造成非常微妙的bug和性能的灾难。

至少,SQL实际上是开发者的疼痛,当编写一个程序时,你有这么好的严格类型的语言与各种编译器保证,但是在编码中间却插入无意义的SQL字符串,语法检查却不编译检查这些SQL语句。这是绑定到一个不可知的程序API或程序的数据源,并可能会导致毫无预警的改变。

这些都展示了需要重要改进的机会。可以想象采取一些明智的步骤:找到一个办法,编程和数据库都使用相同的语言和工具;设计一个数据库查询语言,类似于一种编程语言;内存映射数据库直接进入程序等等。

MongoDB,Redis,Riak以一种有意义的方式获得生存机会。Riak似乎已经靠边站,MongoDB和Redis则会更强。Cassandra和Neo4j都是非主流。MongoDB和Redis则是无处不在的。

为什么?看他们解决问题方式有助于我们明白原因。Redis是重新开始用一个简单的基础概念:标识数据块,然后你可以使用这个标识标签来获取和处理数据。数据可以是丰富结构的方式,这对程序员会很熟悉。

MongoDB也开始用一个简单的概念,本质上是数据库存储嵌套的、结构化的“文件”,可以直接映射到数据结构或编程语言的对象。而在这上面,MongoDB增加了另一个电动工具:你使用查询数据库的编程语言是无处不在的JavaScript,可以说是当今最流行的和灵活的编程语言。所以你不必“sharding分片”你的应用程序。

时间序列数据库

另一个不同的新兴范畴是时间序列数据库。这些数据库存储的是带有时间戳的事实,将时间作为数据模型的原生和本质的部分。他们允许你做时间分析。不仅如此,他们真的认为时态查询为中心。他们中的许多人甚至对时间查询没有任何强制性的限制。

InfluxDB有一个非常陡峭的增长轨迹,它定义了面向时间的数据库。

另一种是ElasticSearch,在一定程度上提供了时间序列的功能,但不能作为唯一的中央概念。这是一个知道时间的分布式搜索引擎。这很自然地引出了一个问题:如果你想使用一个知道时间的非时间序列数据库,为什么使用搜索引擎?为什么不是具有时间序列的功能的关系型数据库?

时间会告诉我们最后生存者,个人敢打赌InfluxDB会赢,有一点是肯定的:时间序列是很重要的,足够作为数据库的第一等公民。

流式数据库

数据技术最终会走向面向流的、pub-sub、队列的这一类,这些数据库基本上存储日志数据,并不是永久性存储状态数据,这些状态虽然能让你直接获取和改变,新的日志数据概念是只插入以不变的方式存储,然后再通过阅读一遍获取(可能多次,可能删除检索)。

你为什么要这样?第一眼看不出原因,“这是类似河流的数据,企业从中获取的一切都是可以喝的”,这种架构是非常强大和非常善良,大大简化复杂事情。

典型的企业数据架构很快会变成了一场噩梦的意大利面。数据流通过用奇特方式,使用队列或流数据库,能够解决很多问题,如性能问题、可靠性问题。

很多技术如Spark 正在围绕这些领域发展。但在我看来,Apache Kafka是无可争议的游戏规则制定者。这确实是一个数据库历史的分水岭技术。

Defining Moments in Database History · Baron Schwa

              

4