关系数据库_关系代数的并行计算_数据库分类

几张图看懂列式存储

从Dremel和Impala的学习引申出了SQL查询的并行执行问题,于是借此机会深入学习一下关系数据库以及关系代数的并行计算

Speedup和Scaleup

Speedup指用两倍的硬件换来一半的执行时间

Scaleup指两倍的硬件换来同等时间内执行两倍的任务

但往往事情不是那么简单,两倍的硬件也会带来其他问题

  • 更多CPU带来的长启动时间和通信开销
  • 以及并行计算带来的数据倾斜问题

多处理器架构

共享内存:任意CPU都能访问任意的内存(全局共享)和磁盘

  • 优点是简单,
  • 缺点是扩展性差,可用性低。

共享磁盘:任意CPU都能访问任何的磁盘,但是只能访问自己的主存

  • 优点是可用性和扩展性比较好,
  • 缺点是实现复杂以及潜在的性能问题

不共享:任意CPU都只能访问自己的主存和磁盘

  • 优点也是扩展性和可用性,
  • 缺点是实现复杂以及复杂均衡

混合型:系统整体上是shared nothing架构,但结点内部可能是其他架构。

  • 这样就混合了多种架构的优点。

数据分区

数据分区的目的就是:让数据库能够并行地读写数据,最大程度地挖掘I/O的潜力

常见的分区算法有:round-robin、范围索引、哈希

关系运算并行化

关系代数自身的属性允许关系操作的并行化

并行查询处理主要分为四步:

  • 翻译:将关系代数表达式翻译成查询树
  • 优化重排join顺序,并选择不同join算法来最小化执行开销
  • 并行:将查询树转换成物理操作树,并加载到处理器
  • 执行并行运行最终的执行计划

首先将一条SQL语句翻译成查询树。

然后根据表大小、索引等情况,重新排列join顺序,并选择合适的算法。

  关于join算法,常见的有以下几种:

  • Nested Loop join:思路很简单,相当于两层循环遍历,外层是驱动表,返回满足关联条件的行。

    适用于驱动表小(经过条件过滤后),而被驱动表上join字段有索引的情况。在两表都很大时效率很差。   

for each row R1 in the outer table
    for each row R2 in the inner table
        if R1 joins with R2
            return (R1, R2)
  • Sort-merge join:思路也很简单,就是join字段排序,然后进行归并排序

    当join字段存在重复值时,相当于每个重复值形成了一个分区Join字段是否排序和重复值的多少决定了sort-merge的效率

    适用于两表都很大的情况尤其当join字段上存在聚集索引时(相当于已经排好序了),效率很高。算法主要消耗在磁盘上

  • Hash join:类似于存在重复值情况时的sort-merge,只不过是人为的使用哈希函数进行分区

    思路是扫描小表建立哈希表(build阶段,小表也叫build表),然后逐行扫描大表进行比较(probe阶段,大表也叫probe表)。

    适用于两表都很大又没有索引的情况,限制是只适用于等值连接。算法主要消耗在CPU上

  

  • 此外,对于子查询还有semi joinanti join等算法。

最后将查询树变成物理操作树,也就是真正的执行计划

然后根据集群的资源情况,调度到合适的结点上进行并行计算

五大存储模型

昨天跟一同事讨论Sybase是不是关系型数据库,同事说Sybase是列式存储,应该属于NoSQL,我一直的记忆Sybase是关系型数据库,后来专门去查了资料,才发现同事所说的Sybase IO是列式存储;而我说的是Sybase SQL Server,是关系型数据库。网上看到这篇文章,算是对几种数据库模型补补课。

数据库市场需要细分,行式数据库不再满足所有的需求,而有很多需求需要通过内存数据库和列式数据库解决,列式数据库在数据分析、海量存储、BI这三个领域有自己独到

1. 关系型数据库(行式数据库) MySQL Sybase Oracle

定义:关系模型使用记录(行或者元祖)进行存储记录存储在表中,表由架构界定

  • 表中的每个列都有名称和类型,表中的所有记录都要符合表的定义
  • SQL是专门的查询语言,提供相应的语法查找符合条件的记录,如表联接(Join)。
  • 表联接可以基于表之间的关系在多表之间查询记录

存储格式:行式数据库把一行中的数据值串在一起存储起来,然后再存储下一行的数据,以此类推。

例如以下的一个表:

EmpId Lastname Firstname Salary
1 Smith Joe 40000
2 Jones Mary 50000
3 Johnson Cathy 44000
1,Smith,Joe,40000;2,Jones,Mary,50000;3,Johnson,Cathy,44000;

  

特点:

  • 据以行相关的存储体系架构进行空间分配
  • 主要适合与小批量的数据处理,
  • 常用于联机事务型数据处理。

不能满足后面三个需求:

  • 对数据库高并发读写要求,
  • 海量数据的高效率存储和访问需求,
  • 对数据库高可扩展性和高可用性

一句话不适合分布式、高并发和海量

2. 列式存储 Sybase IQ, C-Store, Vertica,Hbase

定义:什么是列式数据库?列式数据库是以列相关存储架构进行数据存储的数据库

  • 列式存储以流的方式列中存储所有的数据
  • 主要适合与批量数据处理即席查询

存储格式 :

列式数据库把一列中的数据值串在一起存储起来,然后再存储下一列的数据,以此类推。

1,2,3;Smith,Jones,Johnson;Joe,Mary,Cathy;40000,50000,44000;

特点:

  • 包括查询快,由于查询需要读取的blocks少;
  • 数据压缩比高,正因为同一类型的列存储在一起。
  • Load快
  • 简化数据建模的复杂性。
  • 但是插入更新慢不太适合数据老是变化,它是按列存储的。

这时候你就知道它适做DSS(决策支持系统),BI的优秀选择,数据集市,数据仓库,它不适合OLTP。  

Examples are Sybase IQ, C-Store, Vertica, VectorWise,MonetDB, ParAccel, and Infobright.

3. 键值存储 Cassandra, Hbase, Bigtable

Key-Value存储,简称KV存储

  • 它是NoSQL存储的一种方式
  • 它的数据按照键值对的形式进行组织,索引和存储
  • KV存储非常适合不涉及过多数据关系、业务关系的业务数据,同时能有效减少读写磁盘的次数,比SQL数据库存储拥有更好的读写性能

典型例子 Sorted String Table即SSTable。

  其实STL 库中map和hash_map, JAVA中hash_table, hash_map就是键值存储。

    • 但是他们值只支持内存操作
    • 而且map的查询效率太低
    • 关键是他们只是简单的数据结构
    • 不能实现较大规模存储和分布式,
    • 而且数据的修改效率比较低

而SSTalbe就解决了这些问题。

键值存储实际是分布式表格系统的一种

分布式key-value 系统有cassandra, hbase, bigtable etc

注:其实Hbase也属于列式存储

4. 文档存储

文档存储支持对结构化数据的访问,不同于关系模型的是,文档存储没有强制的架构

事实上,文档存储以封包键值对的方式进行存储。

  • 在这种情况下,应用对要检索的封包采取一些约定
  • 或者利用存储引擎的能力将不同的文档划分成不同的集合,以管理数据

与关系模型不同的是,文档存储模型支持嵌套结构

  例如,文档存储模型支持XML和JSON文档,字段的“值”又可以嵌套存储其它文档

文档存储模型也支持数组和列值键

与键值存储不同的是,文档存储关心文档的内部结构

  • 这使得存储引擎可以直接支持二级索引,从而允许对任意字段进行高效查询
  • 支持文档嵌套存储的能力,使得查询语言具有搜索嵌套对象的能力,XQuery就是一个例子。MongoDB通过支持在查询中指定JSON字段路径实现类似的功能。

MongoDB 对SQL 和ACID 支持的比较全面的数据库了。不过, 比较多的还是介绍日志的采集和存储,小文件的分布式存储,类似互联网微博应用的数据存储等方面的内容。

5.图形数据库

图形数据库存储顶点和边的信息有的支持添加注释

图形数据库可用于对事物建模,如社交图谱、真实世界的各种对象。IMDB(Internet MovieDatabase)站点的内容就组成了一幅复杂的图像,演员与电影彼此交织在一起。

图形数据库的查询语言一般用于查找图形中断点的路径,或端点之间路径的属性。Neo4j是一个典型的图形数据库。

原文地址:https://www.cnblogs.com/panpanwelcome/p/8716604.html

时间: 2024-12-22 22:35:05

关系数据库_关系代数的并行计算_数据库分类的相关文章

关系代数的并行计算

从Dremel和Impala的学习引申出了SQL查询的并行执行问题,于是借此机会深入学习一下关系数据库以及关系代数的并行计算. Speedup和Scaleup Speedup指用两倍的硬件换来一半的执行时间.Scaleup指两倍的硬件换来同等时间内执行两倍的任务.但往往事情不是那么简单,两倍的硬件也会带来其他问题:更多CPU带来的长启动时间和通信开销,以及并行计算带来的数据倾斜问题. 多处理器架构 共享内存:任意CPU都能访问任意的内存(全局共享)和磁盘.优点是简单,缺点是扩展性差,可用性低.

.Net常用技巧_生成物料编号(根据分类代码生成)

这个是自己用的,不一定符合您的需求. using System; using System.Collections.Generic; using System.Text; using EXDataControl; using System.Data; using System.Data.SqlClient; using Utility; namespace MyTool { public class CreateMaterialCode { /// <summary> /// 获取新物料编号(

python基础教程_学习笔记22:数据库支持

数据库支持 python数据库API 支持sql标准的可用数据库有很多,其中多数在python中都有对应的客户端模块. 全局变量 python DB API的模块特性 变量名 用途 apilevel 所使用的python db api版本 threadsafety 模块的线程安全等级 paramstyle 在sql查询中使用的参数风格 异常 异常 超类 描述 StandardError 所有异常的泛型基类 Warning StandardError 在非致命错误发生时引发 Error Stand

.Net基础篇_学习笔记_第四天_关系运算符和逻辑运算符

1.关系运算符 包含:>   <   <=  >=   ==  != 以及bool类型中的true和false. 2.逻辑运算符 与 && 或 || 非 ! 注意: 逻辑运算符的两边放的一般都是关系表达式或者bool类型的值 3.复合运算符 +=  -= *= /= 另外:扩充延伸....... 判断是否为闰年? using System; using System.Collections.Generic; using System.Linq; using Syst

赵雅智_使用SQLiteDatabase操作SQLite数据库及事务

知识点详解:http://blog.csdn.net/zhaoyazhi2129/article/details/9025995 具体代码: MainActivity.java package com.example.android_sqlite; import android.app.Activity; import android.os.Bundle; import com.example.android_sqlite.dao.impl.UserDaoImpls; import com.ex

关系代数的问题与尝试(2)关联运算及描述

下面我们来讲关系代数中的具体的问题,先谈关联运算的描述. 使用SQL对于单表进行查询并不是很难理解和实施,一般也就是选取字段.过滤.排序等,只有分组汇总稍复杂些,也不是多难懂. 但是,有意义的查询经常是多表的,比如查一下从北京到上海打了多少电话,存款超过10万元的人中本科学历及以上的有多少.这些都需要用到多表关联运算. SQL中用多表关联运算是用JOIN运算实现的,JOIN运算在关系代数中定义非常简单通用,就是两个表做笛卡尔积后再过滤. 简单的好处,就是适用面广,什么都能表达:但也有坏处,它没有

ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 使用ArcGIS进行空间分析 1.1 GIS分析基础 GIS的六大功能是数据获取.存储.查询.分析.表达.输出.在前面的内容里已经介绍了使用ArcGIS进行数据获取.存储.查询.表达和输出的过程,本章将介绍如何在ArcGIS中进行地理分析.分析是GIS的核心和灵魂,是GIS区别于一般的信息系统.CAD或者电子地图系统的主要标志之一. GIS分析,就是研究

ArcGIS for Desktop入门教程_第六章_用ArcMap制作地图 - ArcGIS知乎-新一代ArcGIS问答社区

原文:ArcGIS for Desktop入门教程_第六章_用ArcMap制作地图 - ArcGIS知乎-新一代ArcGIS问答社区 1 用ArcMap制作地图 作为ArcGIS for Desktop的组成部分之一,ArcMap用于数据的浏览.编辑.显示.查询.地图排版等.ArcMap和ArcCatalog一起构成了完整的数据处理与管理分析的功能.在前一章中已经介绍了ArcCatalog的使用,本章中将介绍ArcMap的使用.本章的例子依然使用第4章里的小区平面图示例,但是将从原理的角度做更加

关系代数的问题与尝试(5)云数据组织

摘要: 本文来自北京润乾软件技术有限公司董事长蒋步星在清华大数据产业联合会的讲座. 最后再简单说一下云计算的数据组织问题. 云数据有这样几个特征: 第一,多样性.云计算要解决多租户的问题,显然不同用户的数据结构经常是不一样的,即使同一个用户.同一块业务,数据结构在不同地域.不同时期都会不一样.象我们这样一个小公司的财务系统,数据结构都年年在变,今年没有这种销售提成,明年有了,就要增加一些字段或表来处理. 数据的多样性其实是很本质的需求,世界就是这么复杂.多样性在关系数据库的时代也存在.只不过关系