No-SQL正在逐步淘汰SQL?上周,一位朋友转发给我一封来自一位成功企业家的电子邮件,声称“SQL已过时”。这位企业家声称,MongoDB和Redis等流行的No-SQL数据库将慢慢淘汰基于SQL的数据库。因此,作为数据科学家,学习SQL是“手残”。看到他的邮件我很震惊。他是如何得出如此离谱的结论的?不过也让我很好奇……别人会不会也这么误会?这位企业家有很多粉丝,他本人也直言不讳:是否建议新的数据科学家不要学习SQL?其他人可能还认为SQL正在被淘汰。在这里,我想开诚布公地请这位企业家回答。学习SQL对于数据科学职业至关重要。No-SQL不能动摇学习SQL的意义。基本上,SQL在未来几十年内不会过时的原因有两个。理由一:No-SQL数据库不会取代Presto、Redshift、BigQuery等分析型数据库,无论应用是使用MySQL这样的SQL后端还是MongoDB这样的No-SQL后端,那个后端的数据最终都会是载入专门的分析数据库,例如Redshift、Snowflake、BigQuery或Presto。分析数据库平台的示例架构:SQL和NoSQL为什么公司将数据移动到像Redshift这样的列式存储?因为列式存储可以更快地运行分析查询,无论是NoSQL还是像MySQL这样的行存储数据库。事实上,我敢打赌,列式存储数据库的流行速度与NoSQL数据库一样快。所以,就像NoSQL和其他数据库有匹配的应用程序一样,它们的技术通常与数据科学家无关,因为他们不使用数据库应用程序。当然也有一些例外,这将在后面讨论。理由二:NOSQL数据库的优势不在于不支持SQL语言。事实证明,如果支持基于SQL的查询引擎有意义,那么No-SQL存储就可以实现它。同样,SQL数据库也可以支持NoSQL查询语言,但他们选择不支持。那么,列存数据库为什么要特意选择提供SQL接口呢?他们做出这样的选择,是因为SQL语言在表达数据操作指令方面非常强大。以一个简单的查询为例,就是NoSQL数据库下MongoDB计算集合中的文档数。注意:MongoDB中的文档类似于行,而集合类似于表。db.sales.aggregate([{$group:{_id:null,count:{$sum:1}}}])将其与等效的SQL进行比较。selectcount(1)fromsales显然,对于想要提取数据的人来说,SQL语言是更好的选择。NoSQL数据库支持不同的语言,因为就数据库接口的应用程序库而言,正确构造SQL更加困难。如前所述,应用数据库技术与数据科学家无关,但这条规则也有一些例外。我的第一家公司实际上没有像Redshift这样的分析数据库,所以必须直接查询应用程序的数据库。更准确地说,正在查询应用程序数据库的只读副本。公司的应用也使用了No-SQL数据库Redis,不止一次需要直接从Redis中拉取数据,所以确实需要学习Redis的NoSQLAPI的一些组件。因此,在主应用程序专门使用NoSQL数据库的环境中,学习哪种SQL可能并不重要。但在极少数情况下,随着公司的发展,他们几乎肯定会投资于支持SQL的列式存储分析数据库。
