一、专家简介
VoltDB公司首席技术官Ryan Betts表示,SQL已经赢得了大型企业的广泛部署,大数据是它可以支持的另一个领域。
Couchbase公司首席执行官Bob Wiederhold表示,NoSQL是可行的选择,并且从很多方面来看,它是大数据的最佳选择,特别是涉及到可扩展性时。
二、SQL经历时间的考验,并仍然在蓬勃发展
结构化查询语言(SQL)是经过时间考验的胜利者,它已经主宰了几十年,目前大数据公司和组织(例如谷歌、Facebook、Cloudera和Apache)正在积极投资于SQL。
在成为主导技术(例如SQL)后,有时候我们很容易忘记其优越性。SQL的独特优势包括:
1. SQL能够加强与数据的交互,并允许对单个数据库设计提出问题。这是很关键的特征,因为无法交互的数据基本上是没用的,并且,增强的交互性能够带来新的见解、新的问题和更有意义的未来交互。
2. SQL是标准化的,使用户能够跨系统运用他们的知识,并对第三方附件和工具提供支持。
3. SQL能够扩展,并且是多功能和经过时间验证的,这能够解决从快写为主导的传输到扫描密集型深入分析等问题。
4. SQL对数据呈现和存储采用正交形式,一些SQL系统支持JSON和其他结构化对象格式,比NoSQL具有更好的性能和更多功能。
虽然NoSQL的出现带来了一些影响,但SQL仍然主导着市场,并在大数据领域赢得了很多投资和广泛部署。
NoSQL的说法很含糊,对于本次讨论,我借用Rick Cattell对NoSQL的定义,即提供简单操作(例如密钥/数值存储)或简单记录和索引,并专注于这些简单操作的横向可扩展性的系统。
很显然,现在很多新的数据库并不是都一样,认识每种数据库背后的原理以及潜在问题是成功的关键。NoSQL的主要特点使其更适合于特定的问题。例如,图形数据库更适合于数据通过关系组织的情况,而专门的文本搜索系统更适合于需要实时搜索的情况。
在这里,让我们看看SQL系统的主要优势和差异化功能:
* SQL可实现交互性。 SQL是一种声明性查询语言。用户说出他们想要什么(例如,显示过去五年三月份期间顶级客户的地理位置),数据库内部就会构件算法并提取请求的结果。相比之下,NoSQL编程创新MapReduce是一种程序性查询技术。在用户提出请求时,MapReduce要求用户不仅说出自己想要什么,而且要求他们陈述如何产生答案。
这听起来像一个无趣的技术差异,但这很关键,原因在于:首先,声明性SQL查询更容易通过图形化工具以及点击报告构建器来构建。这让分析师、操作员、管理者和其他不具备软件编程能力的员工进行数据库查询;其次,数据库引擎可以利用内部信息来选择最有效的算法。改变数据库的物理布局或数据库,最佳算法仍然能够计算出来。而在程序性系统中,编程人员需要重新访问和重新编程算法,这是非常昂贵且容易出错的过程。
市场理解这个关键区别。在2010年,谷歌宣布部署SQL来补充MapReduce,主要受内部用户需求所驱动。最近,Facebook发布了Presto(一种SQL部署)来查询其PB级HDFS集群。根据Facebook表示:“随着我们的仓库增长到PB级,以及我们的需求变化,我们清楚地意识到,我们需要一个提供低延时查询的互动系统。”此外,Cloudera也正在构建Impala—另一个基于HDFS的SQL部署。
* SQL是标准化的。 虽然供应商有时候会添加自己的语言到SQL界面,但SQL的核心是标准化的,还有其他规格(例如ODBC和JDBC)提供广泛可用的稳定界面到SQL存储。这带来了一个管理和操作工具生态系统,可以在SQL系统之上设计、监控、检查、探索和构建应用程序。
SQL用户和程序员可用跨多个后端系统重复使用其API和UI知识,减少了应用程序的开发时间。标准化还允许声明性第三方提取、转换、加载(ETL)工具,使企业可以在数据库之间以及跨系统传输数据。
* SQL可扩展。 认为SQL必须牺牲以获得可扩展性的看法,完全是错误的。如前所述,Facebook创建了一个SQL界面来查询PB级数据。SQL能够非常有效地运行极快的ACID传输。SQL对数据存储和索引提供的抽象[注]化允许跨各种问题和数据集大小的一致使用,让SQL可以跨集群复制数据存储有效地运行。使用SQL作为界面独立于构建云、规模或HA系统,SQL中并没有什么在阻止和限制容错、高可用性和复制。事实上,所有现代SQL系统支持云友好型横向可扩展性、复制和容错性。
* SQL支持JSON。 几年前,很多SQL系统增加了XML文档支持。现在,随着JSON成为一种流行的数据交换格式,SQL供应商也纷纷加入了JSON型的支持。基于现在灵活的编程过程和web基础设施的正常运行时间要求,我们很需要结构化数据类型的支持。Oracle 12c、PostgreSQL 9.2、VoltDB和其他支持JSON的数据库,通常具有优于“原生”JSON的性能。
SQL将继续赢得市场份额,并会继续看到新的投资和部署。NoSQL数据库提供专有查询语言或简单的键值语义,而没有更深层次的技术差异化。现代SQL系统提供可扩展性的同时,还支持更丰富的查询语义,并有庞大的用户安装基础,广泛的生态系统整合和深度企业部署。
三、NoSQL更适合大数据应用程序
NoSQL越来越多地被认为是关系型数据库的可行替代品,特别是对于大数据应用程序。此外,无模式数据模型通常更适合于现在捕捉和处理的数据种类和类型。
当我们谈论NoSQL领域的大数据时,我们指的是从操作数据库读取和写入。不要将操作数据库与分析数据库混淆,这通常会查看大量数据,并从这些数据获取可视性。
虽然操作数据库的大数据看起来不具有可分析性,但操作数据库通常会存储超大量用户的大型数据集,这些用户经常需要访问数据来实时执行交易。这种数据库的操作规模也解释了NoSQL的关键特性,也就是为什么NoSQL是大数据应用程序的关键的原因。
四、NoSQL是可扩展性的关键
每次技术行业经历硬件发展的根本性转变时,都会出现一个拐点。在数据库领域,从纵向扩展到横向扩展的转变推动了NoSQL的发展。关系型数据库(包括来自甲骨文和IBM的数据库)是纵向扩展。也就是说,它们是集中式、共享一切的技术,只能通过增加更多昂贵的硬件来扩展。
而NoSQL数据库是分布式横向扩展技术。它们使用了分布式节点集(称为集群)来提供高度弹性扩展功能,让用户可以添加节点来动态处理负载。
分布式横向扩展的做法通常要比纵向做法更加便宜。商业关系型数据库的授权费用也让人望而却步,因为他们的价格是按每台服务器来计算。另一方面,NoSQL数据库通常是开源技术,按照运行的服务器集群收费,而且价格相对便宜。
五、NoSQL是灵活性的关键
关系型数据库和NoSQL数据模型有很大的不同。关系型模式获取数据,并将数据分配到很多相互关联的表中,这些表通过外键相互应用。
当用户需要对数据集运行查询时,所需信息需要从多个表中收集(通常涉及数百个企业应用程序),并结合这些信息,再提供给应用程序。同样地,当写入数据时,需要在多个表协调和执行写入。当数据相对较少,并且,数据以较慢速度流入数据库时,关系型数据库通常能够捕捉和存储信息。然而,现在的应用程序通常需要快速写入(和读取)海量数据。
NoSQL数据库采用非常不同的模式。在其核心,NoSQL数据库其实是“NoREL”,或者说非关系型,这意味着它们没有依赖于表以及表之间的联系,以存储和组织信息。例如,以文档为导向的NoSQL数据库获取你想要存储的数据,并采用JSON格式整合到文档中。每个JSON文档可以被你的应用程序视为一个对象。JSON文档可能会提取跨越25个表的数据,将数据集成到一个文档中。
聚合这些信息可能会导致信息重复,但由于存储已不再是一个成本问题,数据模型灵活性、发布所产生文档的简便性以及读取和写入性能提高,让这成为不错的选择。
六、NoSQL是大数据应用程序的关键
通过第三方(包括社交媒体网站),数据正变得越来越容易捕捉和访问。这些数据包括:个人用户信息、地理位置数据、用户生产的内容、机器记录数据和传感器产生的数据。企业还可以依赖于大数据来推动其关键任务型应用程序。同时,企业正在转向到NoSQL数据库,因为这种数据库非常适合现在新型的数据类型。
开发人员想要一个灵活的数据库,可以很容易适应新的数据类型,并且,不会受第三方数据供应商的内容结构变化的影响。大多数新数据是非结构化和半结构化,因此,开发人员也需要能够有效存储这些数据的数据库。然而,关系型数据库采用的严格定义的基于模式的做法让其不可能快速整合新数据类型,并且很不适合于非结构化和半结构化数据。
总体来说,随着web和移动应用程序的增加、新的趋势、网上消费者行为的转变以及新的数据类型的出现,行业需要能够提供可扩展的灵活的数据库技术来管理和访问数据。NoSQL技术是有效满足这些需求的唯一可行解决方案。
大数据时代的数据库选择:SQL还是NoSQL?
四种数据库随机获取10条数据的方法
SQL Server:SELECT TOP 10 * FROM T_USER ORDER BY NEWID()ORACLE:SELECT * FROM (SELECT * FROM T_USER ORDER BY DBMS_RANDOM.RANDOM()) WHERE RONUM <= 10MySQL:SELECT *
Mysql分页查询limit语句的性能分析
一、limit用法在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,这个时候怎么办呢?不用担心,mysql已经为我们提供了这样一个功能。SELECT * FROM table LIMIT [off
sql文件导入[ERR] 2006 - MySQL server has gone away
目录 问题 原因 解决办法 如何设置和查看使用Navicat Premium 12导入mysql的sql文件时,导入失败,出现如下错误:2006 - MySQL server has gone away。mysql出现ERROR : (2006, &
mysql8.0 .ibd文件恢复表结构的实现
今天早上启动了 phpstudy 软件中的 MySQL 8.0 数据库时,发现它启动后约过了 3 秒就自行关闭了。接着又自动启动然后再次关闭,似乎陷入了一个“开-闭-开”的循环。这导致我无
MySQL实现按分秒统计数据量方式
目录
1. 每秒交易量
2. 每分钟交易量
3. 每5分钟交易量
4. 每10分钟交易量
5. 每30分钟交易量
结合 WHERE
Redis的五种基本类型和业务场景和使用方式
目录 Redis是什么? Redis的特点 依赖 配置 redis的配置类(用于格式转换,处理乱码) String(字符串) 特点 业务场景 代码使用案例 List(列表) 特点 业务场景 代码使用案例 S
Oracle中BLOB、CLOB的读取和写入方式
目录 Oracle中BLOB、CLOB的读取和写入 基于SQL的方式实现CLOB、BLOB的插入与读取 1. 插入大类型数据 2. 读取大类型数据并转换为字符串 基于Java方式实现CLOB和B
dbeaver如何导出mysql数据库
目录 dbeaver导出mysql数据库 右键表-tools-Dump database 按默认设置 总结 dbeaver导出mysql数据库右键表-tools-Dump database按默认设置只需修改输出文件夹我这里把
DBeaver如何实现导入excel中的大量数据
目录 DBeaver如何导入excel中的大量数据 步骤一:将Excel文件转换为CSV格式 步骤二:在DBeaver中创建数据库表(如果尚未创建) 步骤三:导入CSV文件到数据库表 注意事项 总结
Oracle归档日志爆满问题的处理方法
目录 一、先清理归档日志使得数据库能够正常连接 二、排查问题 三、处理问题 四、清理后效果最近客户单位的oracle数据库出了问题,经常出现无法连接,报错提示 ORA-00257: arc
Mysql中常用函数之分组,连接查询功能实现
目录 函数 单行函数 字符函数 数学函数 日期函数 流程控制函数 分组函数 分组查询 按单个字段分组 在分组前进行条件筛选 在分组之后进行条件筛选 按多字段分
SQL Server计算两个时间相差的示例代码
目录 1、计算两个时间字符串之间的差值 2、字符串转换成日期/时间类型 3、计算两个日期和时间之间的差值在 SQL Server 中,计算两个时间字符串之间的差值 首先将这些字符串转
Oracle DECODE 丢失时间精度的原因与解决方案
目录 问题描述 原因分析 解决方案在Oracle数据库中,DECODE 函数是一个非常实用的条件处理函数,通常用于替代简单的 CASE WHEN 语句。它根据给定的值列表进行匹配,如果匹配成功
使用 SQL 快速删除数百万行数据的实践记录
目录 描述 实践描述删除表大批量数据,这是一个比较少的事件。 但在实际的业务开发中或者数据测试也会遇到这种情况。比如定期从日志大表中删除几百万的数据记录;删除表数据的
MySQL处理大量DELETE操作的多种方法
目录 前言 简介 概述 DELETE 操作的基本概念 常用的 DELETE 方法 核心源码解读 简单 DELETE 语句 批量 DELETE 示例 案例分析 案例1:使用简单 DELETE 删除用户数据
MySQL删除表数据、清空表命令详解(truncate、drop、delete区别)
目录 一、MySQL清空表数据三种方法 1.1 清空表数据:truncate 1.2 删除表:drop 1.3 删除/清空表数据:delete 二、使用原则 三、truncate、drop、delete区别 1.操作类型
mysql如何将数据库中的所有表结构和数据导入到另一个库
目录 一、问题描述 二、解决方案 1.使用mysqldump命令备份数据库 2.创建目标数据库 3.导入数据 到目标数据库 三、补充知识 3.1 mysqldump命令介绍 3.2 常用备份命
MySQL深分页,limit 100000,10优化方式
目录 一、limit深分页为什么会变慢 二、优化方案 2.1 通过子查询优化(覆盖索引) 回顾B+树结构 覆盖索引 把条件转移到主键索引树 2.2 INNER JOIN 延迟关联
MySQL中的TRUNCATE()函数用法
目录 MySQL的TRUNCATE()函数 规则如下 函数示例 当 X 为正数时 当 X 为负数时 总结 MySQL的TRUNCATE()函数TRUNCATE(X,D) 是MySQL自带的一个系统函数。其中,X是数值,D
查看本地MYSQL数据库IP地址的三种方法
目录 方法一:在电脑设置中查看电脑iP地址 方法二:通过运行程序查看电脑IP地址 方法三:通过浏览器查看电脑IP地址 拓展:在自己电脑建立了MYSQL数据库,但是想在其它的电脑进行连接,
Redis中pipeline(管道)的实现示例
目录 概念 Pipeline 底层原理分析 Redis单个命令执行基本步骤 RTT 时间 Redis Pipeline Pipeline实际应用场景 数据导入导出 数据处理 批量操作 其他应用场
Postgresql开启SQL执行语句收集过程
修改配置文件1.打开Postgresql配置文件,如:C:\Program Files\PostgreSQL\14\data\postgresql.conf
2.修改如下,如果字段被#注释,则去掉#log_directory = 'log'
log_file
MySQL分区表的使用
目录 创建分区 删除分区 分区性能 总结说明:分区表,顾名思义,就是一张表根据规则,划分多个区,通过分区,实现一种“逻辑隔离”,这在Saas系统中是非常常见的。本文介绍如何
KubeSphere部署mysql的详细步骤
目录 1.创建mysql基础配置 2.创建pvc挂载 3.创建工作负载 4.创建服务(创建服务后才能进行外部访问) 5.测试mysql是否能正常访问演示示例使用的是3.4.1,各版本有名字差异 功能是
mySQL 8.0.33安装指南(推荐)
目录 安装步骤 1. 解压安装包 2. 移动解压后的文件夹 3. 创建MySQL用户 4. 设置权限 5. 配置MySQL 6. 设置环境变量 7. 初始化数据库 8. 设置系统服务 9. 设置roo
重置MySQL 8.0 Root密码的简便方法小结
目录 解决方案 1. 检查是否输入正确的密码 2. 使用“跳过权限表”的方式重置 root 密码 2.1 停止 MySQL 服务 2.2 以跳过权限表模式启动 MySQL 2.3 重
Redis实现接口防抖的示例代码
目录 实现 演示说明:实际开发中,我们在前端页面上点击了一个按钮,访问了一个接口,这时因为网络波动或者其他原因,页面上没有反应,用户可能会在短时间内再次点击一次或者用户以为没
Solusi MySQL 错误无法启动
发生的错误好吧,当我在 laragon 应用程序中从mysql 5.1.72升级到mysql 8.0.32时,发生了这个错误。当我在 laragon 应用程序中 start all 时,出现的错误是这样的。laragon 中的
掌握数据库操作:索引、视图、备份和恢复
介绍在本实验中,我们将学习和练习索引、视图、备份和恢复。这些概念对于数据库管理员来说非常重要。学习目标 创建索引 创建视图 备份与恢复准备开始之前,我们需要准备好环境
怎么导入mysql数据库文件 mysql数据库怎么导入sql文件
如何将 SQL 文件导入 MySQL 数据库导入 MySQL 数据库文件的方法:使用 MySQL 客户端 打开 MySQL 客户端并连接到目标数据库。 使用 SOURCE 命令,后跟要导入的 SQL 文件路径:SOUR