重新定义数据库历史的时刻——时间序列数据库Schwartz认为InfluxDB最有前途,Elasticsearch也不错

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

转自:http://www.infoq.com/cn/news/2017/04/redefine-database-history

提起VividCortex公司的创建者兼CEO Baron Schwartz,大家可能会比较陌生,但读过他的著作《高性能MySQL》的一定大有人在。他同时也做过许多开源软件的性能分析、监控和管理工作。同时他还对许多不同的数据库社区有所贡献,包括Oracle、PostgreSQL、Redis和MongoDB等。最近他在博客上分享了一些关于数据库的想法。从2000年左右LAMP组合引起的互联网大潮开始,到后来竞争者的出现,从其现象展示出来的一些关键因素,他谈到了我们可以从中得到的收获,以及对未来的展望。

为什么LAMP组合可以获得这么大的成功呢?其实它的每个组成部分都有很多东西可以讲,而且反应了技术架构上的变化,或者说是架构变化的产物。但我觉得其中的MySQL则是今天数据库趋势的领头羊。

MySQL的成功与互联网的繁荣相辅相成,它成功的因素有很多,很难下定论,但很明确的一点就是它“足够好”。MySQL的巨大成功也造就了后来的NoSQL大潮,但随着NoSQL的定义由“不要SQL”慢慢冷却退化成“不只是SQL”,并且慢慢地都支持了类SQL的语言,在这一切发生之后,Baron Schwartz相信关系型数据库仍将持续发展并长久不衰,但它的统治地位已经被动摇,新兴的技术中必然有些会发展得可以与之平起平坐。他认为现在已经可以看出数据库技术发生了一些历史性的转变。

下一代通用型数据库

关系型数据库和SQL使用起来都是比较痛苦的。SQL并不能非常直观地反映出写SQL的人的真实意图。而且在一条SQL执行的时候,如果不是一个数据库专家,你并不了解数据库在背后到底做了多少事情,由此会产生多少副作用。而且将SQL写到程序代码里时也是非常痛苦的,因为现代编辑器可以在写代码的同时就帮你解决许多编程语言的问题,但对于程序代码中的SQL语言块它们却无能为力。在编辑器看来它们就是一个个无意义的字符串,没办法进行编译、语法检查、甚至类型检查等等。一直到程序运行起来,你才能得到一些晦涩的执行返回。

因此SQL是有许多方面可以改进的,比如让程序代码和数据库使用相同的语言和工具集;设计一种数据库查询语言,让它与编程语言的工作方法类似;将数据库与程序的内存空间映射起来……等等。当然由此会引入许多新问题,毕竟当初SQL被发明出来时就是解决了一批旧问题,又引入了许多新问题。历史总是惊人的相似。

事实上正是这些原因引发了2009年左右出现的一代新型数据库,比如map-reduce数据库、键值型数据库、Javascript数据库等。它们都有着各自美好的初衷,在某些领域做得非常出色,也在某些方面饱受诟病。作为新兴数据库技术的密切观察者,Baron Schwartz曾经非常看好MongoDB、Redis和Riak。现在事实也证明MongoDB和Redis使用的广泛性。虽然Schwartz不敢断言这两种数据库胜出的绝对原因,但肯定有部分原因是在于使用它们时是非常愉悦的:

Redis的设计理念很简单:为一条数据打上标签,然后就可以用这个标签去获取并操作数据了。数据结构非常丰富,而且数据结构的设计也和程序员们的习惯非常吻合,处理数据的操作正是构建应用程序的基础操作。而且,Redis非常专注于把这些事情做好,并且不会分心去解决别的问题。

MongoDB的概念也类似,基本就是数据库应该可以存储嵌套的、结构化的文档,并且可以直接映射为编程语言中使用的数据结构或对象。并且在此之上MongoDB还有另外一个强大的工具:可以直接使用应用得非常广泛的JavaScript来查询数据库。还有,它内置分布式的特性,因此你的业务程序就不必再考虑分片细节了。

同时代出现的其它NoSQL型数据库由于没有用类似思路去解决相似问题,所以在大潮过后,它们也就慢慢退出历史舞台了。比如Cassandra解决了分布式问题,但给程序员们的表现手段实在有限,最终成了一个非常高可用却不怎么强大的数据库,因此没有什么吸引力。

Baron Schwartz认为:

人们将来创造出来的更加现代的数据库必将是非常实用而且好用的。

时间序列数据库

时间序列数据库会把事件带上时间戳保存起来,并将时间戳作为数据模型的一个非常天然而基本的组成部分。它们支持做基于时间的分析,以支持基于时间的查询为第一要务。许多时间序列数据库甚至强制要求任何查询都必须将时间作为一个维度。

Baron Schwartz曾细致地讨论过时间序列数据库,曾经论证世界就是时间序列,而且分享过他认为的时间序列数据库应该满足的需求(尽管针对需求这一部分,他的有些观点已经发生了改变)。在现有的这个类型的数据库产品中,Schwartz认为InfluxDB最有前途,Elasticsearch也不错。

InfluxDB最近的受关注度在急剧上升,因为它在试图定义“一个原生的基于时间的数据库到底是怎样的”,并试图回答作为一个数据库满足这样的特性是否已经足够,以及在有了这样的特性之后,用户还可能希望再添加些什么功能。定义一款数据库的功能边界很难,但现在看起来InfluxDB做得相当不错。

ElasticSearch在某些方面提供了时间序列的功能,但它的核心并不在此。它实际上是一个有时间概念的分布式查询引擎。这样做很自然,人们也会相应的有疑问:如果你准备使用一个有时间的非时间序列数据库,那为什么你不干脆使用一个有时间序列功能的关系型数据库?

Baron Schwartz认为不管怎样,有一件事情非常确定:

时间序列非常重要,一定会有非常棒的专用的时间序列数据库来满足这个需求。绝对不能只是满足于某种其它类型的数据库声称:“哦,我们也支持那个功能!”

xxx
















本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/6737098.html,如需转载请自行联系原作者


相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
相关文章
|
3月前
|
存储 SQL 缓存
数据库测试|Elasticsearch和ClickHouse的对决
由于目前市场上主流的数据库有许多,这次我们选择其中一个比较典型的Elasticsearch来和ClickHouse做一次实战测试,让大家更直观地看到真实的比对数据,从而对这两个数据库有更深入的了解,也就能理解为什么我们会选择ClickHouse。
数据库测试|Elasticsearch和ClickHouse的对决
|
4月前
|
存储 SQL 监控
ADBPG&Greenplum成本优化问题之ADB PG的数据库管控的定义如何解决
ADBPG&Greenplum成本优化问题之ADB PG的数据库管控的定义如何解决
46 2
|
4月前
|
SQL 数据处理 数据库
|
4月前
|
Cloud Native 关系型数据库 分布式数据库
云原生数据库2.0问题之DBStack的定义如何解决
云原生数据库2.0问题之DBStack的定义如何解决
|
5月前
|
数据采集 分布式计算 大数据
MaxCompute产品使用合集之数据集成中进行数据抽取时,是否可以定义使用和源数据库一样的字符集进行抽取
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
5月前
|
存储 JSON 数据库
项目管理定义问题之什么是序列化大对象的值对象数据库形态
项目管理定义问题之什么是序列化大对象的值对象数据库形态
|
6月前
|
SQL 分布式计算 MaxCompute
MaxCompute操作报错合集之通过UDF(用户定义函数)请求外部数据库资源并遇到报错,是什么原因
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
276 0
|
24天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
34 1
|
27天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
37 4
|
1月前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
185 1