热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

SQL:数据世界的通用语

目录摘要SQL的现在NoSQL,NotOnlySQL要分布式,也要SQL总结引用摘要毫不夸张的说,关系数据库是企业软件系统的核心,企业形形色色信息行为的背后,都有关系数据库的支撑。

目录

  • 摘要
  • SQL 的现在
    • NoSQL, Not Only SQL
    • 要分布式,也要 SQL
  • 总结
  • 引用

摘要

毫不夸张的说,关系数据库是企业软件系统的核心,企业形形色色信息行为的背后,都有
关系数据库的支撑。

SQL 作为关系型数据库最重要的功能之一,有着悠久的历史。 随着数字化大潮的到来,
关系数据库(SQL) 又面临着新的机遇和挑战。对于 IT 行业的从业人员,了解关系数据库
和 SQL 新的发展,对于解决企业 IT 的核心问题十分必要。

SQL 的现在

Not Only SQL

NoSQL 的兴起是对于传统的关系型数据库(SQL) 的最近的一次颠覆尝试。有几个原因导
致了 NoSQL 的兴起:

  1. 相对于传统的关系型数据库,NoSQL 更容易为企业提供更好数据库可扩展性,是的企 业能够应对日益增长的庞大的数据量。
  2. 相比于传统的关系型数据库,很多优秀的 NoSQL 以开源的形式存在。
  3. 很多操作在关系型数据库中没有支持,比如 JSON 数据格式全文搜索。
  4. 没有严格的 Schema 限制,因此在很多情况下比较灵活。

然而很快,NoSQL 便暴露除了很多不足:

  1. 没有标准的数据查询语言,不同的 NoSQL 提供了不同且不完备的 SQL 替代品;随着 应用程序的演进,应用程序所累积的数据会越来越多,数据之间的关系会变得越来越 复杂,在这种情况下由于 NoSQL 所提供的简单的数据查询语句不成熟且不完备,尤 其是考虑到 NoSQL 没有严格的 Schema 限制的情况下,导致大量的应用程序和数据 库之间的脆弱的胶水代码。
  2. NoSQL 中很多数据处理和聚合实际上都是开发人员在应用程序中手写,相比于 SQL 广泛的标准适用性和成熟的优化方案,NoSQL 在处理数据之间的多对一和多对多关系 以及数据之间的关联时,性能差距非常明显。

人们很快发现,原来 NoSQL 的真正的意思是 Not Only SQL。

要水平扩展,也要 SQL

2017 年 Google 发布论文 Spanner:Becoming a SQL System1 在这篇论文里,有如下描
述:

尽管这些 NoSQL 系统提供了一些优势,但也确实了很多传统的关系型数据库所拥有的、

程序员所依赖的功能。其中最关键的是缺失了健壮的数据库查询语句,其后果是开发

人员需要在应用程序中手写复杂的数据处理和聚合的逻辑。因此,Google 决定将

Spanner 转变为提供全部 SQL 特性的系统。查询的执行跟 Spanner 的其他架构特性

紧密集成。

论文的后续部分还总结了 Spanner 从 NoSQL 到 SQL 的转变原因:

尽管 NoSQL 功能使得用户可以很简易的加载 Spanner,在一些简单的应用场景中也显

得十分有用;
但 SQL 在复杂数据读取和数据运算方面提供了显著的价值。

无独有偶,2017年8月,Kafka 发布了流式 SQL 引擎 KSQL ,为 Kafka 在处理数据时,
提供完整的 SQL 支持。 不仅仅 Kafka,RabbitMQ、Spark、Flink 等纷纷开始支持 SQL。

这种趋势正是目前正在进行当中的 NewSQL2 大潮。其目标是提供 NoSQL 一样的水
平扩展能力的和同等读写性能的情况下,支持保证原子性、一致性、隔离性和持久性
(ACID) 的事物。也就是说在可扩展性方面匹敌 NoSQL,但同时保留关系型数据库模型。
就目前来看 NewSQL 大体上可以分为三类:

  1. 全新的设计的 NewSQL 系统,包括 Google Spanner、CockroachDB 和 ClustrixDB 等。
  2. 基于分片中间件的传统数据库集群,比如 Oracle 就提供了 MySQL 的 proxy。
  3. 云化的数据库服务 (DBaaS),其中最成功的莫过于 AWS Aurora

《SQL:数据世界的通用语》
《SQL:数据世界的通用语》

尽管新的技术不断涌现,但 SQL 这一古老的技术示出 强大的生命力 ;作为一个广泛
使用的标准技术,在大数据随处可见的今天, 宛然成为数据世界的通用语 。这背后
的原因是什么呢?

  1. 首先 SQL 一个成熟的标准。SQL 诞生于1974年,并在1986年正式成为国际标准。随 后尽管数据库系统如过江之鲫,但大体上这些数据库还是会遵守这个标准。
  2. SQL 是一个非常优秀的抽象模型;对于使用者来讲,SQL 简单易用,不用关心 SQL 背后的诸如存储、同步及先写日志等细节;对于数据库的实现着来讲,SQL 对于如何 实现查询完全没有约束,使得查询优化成为可能,且查询优化比绝大多数普通程序员 基于 C 和 C++ 手写的形同逻辑的实现性能更胜一筹。
  3. 基于 SQL 的极致性能优化。基于生产力的考量,现代的开发大多基于高阶语言,这 些高阶语言大多基于通用的抽象模型,比如 SQL 基于关系型代数3 ,然而站在 CPU 执行的角度来看,所有的这些通用抽象模型无一例外都是以增加额外的开销,也 就是牺牲性能为代价;但最近运行时 SQL 编译技术的兴起使得牺牲性能最小化,开 发人员基于 SQL 快速开发业务,SQL 在运行时由 LLVM 编译成机器码4 已获得 最佳的性能。也就是说使用 SQL 兼顾了生产力和性能。

总结

SQL 这一古老的技术,实际上是一个非常优秀的抽象模型,对使用者来讲简单易用;对数
据库开发者来讲可以灵活的优化;因此展现出十分强大的生命力,随着 NewSQL 的兴起,
在数据日益重要的今天,逐渐成为数据世界的通用语。

引用

1 https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/46103.pdf

2 https://15721.courses.cs.cmu.edu/spring2018/papers/01-intro/pavlo-newsql-sigmodrec2016.pdf

3 https://en.wikipedia.org/wiki/Relational_algebra

4 https://15721.courses.cs.cmu.edu/spring2018/papers/03-compilation/p539-neumann.pdf


推荐阅读
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • 【回顾】聚焦DTCC | 巨杉数据库与您相约DTCC 数据库技术大会
    2018年5月10-12日,第九届中国数据库技术大会(DTCC2018)将以“数领先机•智赢未来”为主题,设定2大主会场及20个技术专场,邀请来自国内外互联网、金融、教育等行业百余 ... [详细]
  • Java工程师书单(初级,中级,高级)
    简介怎样学习才能从一名Java初级程序员成长为一名合格的架构师,或者说一名合格的架构师应该有怎样的技术知识体系,这是不仅一个刚刚踏入职场的初级程序员也是工作一两年之后开始迷茫的程序 ... [详细]
  • 博客_2018年博客总结
    本文由编程笔记#小编为大家整理,主要介绍了2018年博客总结相关的知识,希望对你有一定的参考价值。前言     ... [详细]
  • 云原生SRE
    序言年底了,没有分手的朋友的赶紧分了,所谓新年新气象,年年不重样。去留无意,望看风卷残云。。。运维不会消失,但 ... [详细]
  • 前面刚有AWS开战MongoDB,双方“隔空互呛”,这厢又曝出2亿+简历信息泄露——MongoDB的这场开年似乎“充实”得过分了些。长期以来,作为“最受欢迎的NoSQL数据库”,M ... [详细]
  • 数据库基本介绍
    1、数据库基本知识概念:数据库:database(DB),是一种存储数据的仓库数据库是根据数据结构组织、存储和 ... [详细]
  • 《Python3 网络爬虫开发实战》:高效实用的 MongoDB 文档存储
    NoSQL,全称NotOnlySQL,意为不仅仅是SQL,泛指非关系型数据库。NoSQL是基于键值对的,而且不需要经过SQL ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 企业数据应用挑战及元数据管理的重要性
    本文主要介绍了企业在日常经营管理过程中面临的数据应用挑战,包括数据找不到、数据读不懂、数据不可信等问题。针对这些挑战,通过元数据管理可以实现数据的可见、可懂、可用,帮助业务快速获取所需数据。文章提出了“灵魂”三问——元数据是什么、有什么用、又该怎么管,强调了元数据管理在企业数据治理中的基础和前提作用。 ... [详细]
  • 深度学习中的Vision Transformer (ViT)详解
    本文详细介绍了深度学习中的Vision Transformer (ViT)方法。首先介绍了相关工作和ViT的基本原理,包括图像块嵌入、可学习的嵌入、位置嵌入和Transformer编码器等。接着讨论了ViT的张量维度变化、归纳偏置与混合架构、微调及更高分辨率等方面。最后给出了实验结果和相关代码的链接。本文的研究表明,对于CV任务,直接应用纯Transformer架构于图像块序列是可行的,无需依赖于卷积网络。 ... [详细]
  • 本文总结了淘淘商城项目的功能和架构,并介绍了传统架构中遇到的session共享问题及解决方法。淘淘商城是一个综合性的B2C平台,类似京东商城、天猫商城,会员可以在商城浏览商品、下订单,管理员、运营可以在平台后台管理系统中管理商品、订单、会员等。商城的架构包括后台管理系统、前台系统、会员系统、订单系统、搜索系统和单点登录系统。在传统架构中,可以采用tomcat集群解决并发量高的问题,但由于session共享的限制,集群数量有限。本文探讨了如何解决session共享的问题。 ... [详细]
  • 本文介绍了一个React Native新手在尝试将数据发布到服务器时遇到的问题,以及他的React Native代码和服务器端代码。他使用fetch方法将数据发送到服务器,但无法在服务器端读取/获取发布的数据。 ... [详细]
author-avatar
孙衍龙
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有