事务的ACID原子性(Atomicity) 单个事务,为一个不可分割的最小工作单元,整个事务中的所有操作要么全部commit成功,要么全部失败rollback,对于一个事务来说,不可能只执行其中的一部分SQL操作,这就是事务的原子性。
一致性(Consistency) 数据库总是从一个一致性的状态转换到另外一个一致性的状态。在前面的例子中, 一致性确保了,即使在执行第三、四条语句之间时系统崩潰,信用卡账户也不会损 失100块,因为事务最终没有提交,所以事务中所做的修改也不会保存到数据库中,保证数据一致性。
隔离性(Isolation) 通常来说,一个事务所做的修改在最终提交以前,对其他事务是不可见的。在前面 的例子中,当执行完第三条语句、第四条语句还未开始时,此时有另外一个账户查询余额SQL开始运行,则其看到的信用卡账户的余额并没有被减去100元。后面我们讨论隔离级别(Isolation level)的时候,会发现为什么我们要说事务通常来说是不可见的。
持久性(Durability) 一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失。
...
原文链接:
引用站外地址
超详细!MyISAM和InnoDB到底有什么区别?!(12个区别与选择依据)
飞翔的驴
前言存储引擎就是 MySQL将数据存储在文件系统中的存储方式或者存储格式,目前 MySQL常用的两种存储引擎就是MyISAM和InnoDB
概述MyISAM和InnoDB
InnoDB:MySQL默认的事务型引擎,也是最重要和使用最广泛的存储引擎。
它被设计成为大量的短期事务,短期事务大部分情况下是正常提交的,很少被回滚。InnoDB的性能与自动崩溃恢复的特性,使得它在非事务存储需求中也很流行。除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。
MyISAM:在MySQL 5.1 及之前的版本,MyISAM是默认引擎。
MyISAM是 MySQL数据库服务器中的组件,负责为数据库执行实际的数据I/O操作;它提供的大量的特性,包括全文索 ...
Distinct优化应该如何优化?Hive底层使用MapReduce作为实际计算框架
假设当前有个去重任务SELECT COUNT( DISTINCT id ) FROM TABLE WHERE ...
由于引入了DISTINCT,因此在Map阶段无法利用combine对输出结果去重,必须将id作为Key输出,在Reduce阶段再对来自于不同Map Task、相同Key的结果进行去重,计入最终统计值。
该作业运行时的Reduce Task个数为1,对于统计大数据量时,这会导致最终Map的全部输出由单个的ReduceTask处理。这唯一的Reduce Task需要Shuffle大量的数据,并且进行排序聚合等处理,这使得它成为整个作业的IO和运算瓶颈。但是,如果显式地增大Reduce Task个数来提高Reduce阶段的并发set mapred.reduce.tasks=100;调整后我们会发现这一参数并没有影响实际Reduce Task个数。因为Hive在处理COUNT这种“全聚合(full aggregates)”计算时,它会忽略用户指定的Reduce Task数,而强制使用1。
鉴于 ...
Spark算子要了解Spark中任务调度的基本原理,首先要了解一下Spark中算子的类型有哪些。
Spark算子分类
1.Transformation(转换算子) 它会在一个已经存在的 RDD 上创建一个新的 RDD,这也使得RDD之间存在了血缘关系与联系。这种算子用于从一个RDD转换成另一个RDD,它可以被用来创建新的RDD,也可以被用来转换已有的RDD。它们提供了一种通用的方法来完成RDD的转换,如map、filter、groupByKey等。
2.Action(动作算子) 执行各个分区的计算任务, 结果返回到 Driver 中。它们用于从一个RDD中收集数据,或者从一个RDD中计算结果,如collect、reduce、count等。行动算子可以基于RDD的转换算子的结果来进行计算,也可以基于一组RDD来进行计算。
Spark算子特点
1.Spark 中所有的 Transformations 是 惰性 的, 不会立即执行获得结果. 只会记录在数据集上要应用的操作.当需要返回结果给 Driver 时, 才会执行这些操作, 这个特性叫做 惰性求值
2.每一个 Action 运行的时候 ...
明细模型(Duplication Model)每条数据都会被完整地存储,不进行任何聚合操作。适用于需要保存完整数据的场景,例如日志数据、事件数据等。在存储时,数据按照导入的顺序存储,不做去重处理。
本模型的优点在于:所有的输入数据都被存储,保留了数据的完整性和原始性;而且适用于多种查询类型,不需要预先定义聚合逻辑。但是也有占用存储空间大,查询效率低的缺点。
聚合模型(Aggregation Model)聚合模型适用于需要对数据进行预聚合的场景。通过在写入时进行预聚合,可以大大减少查询时的计算量,提高查询性能。支持SUM、MIN、MAX、REPLACE、HLL等多种聚合函数。
模型优点在于占用存储空间小,因为数据已经经过预先聚合,大幅减少了数据量,而由此该模型也具备较高的查询效率。同样的,聚合的需求也造成模型灵活性低,需要预先定义聚合逻辑,后续修改较为复杂。以及由于数据被聚合,而导致数据精度的损失的缺点。
主键模型(Unique Key Model)主键模型适用于需要对数据进行更新和删除操作的场景。通过主键来唯一标识每条记录,可以实现对数据的高效更新。由于主键一定是无重复的,所以在该模型 ...
Presto中的SQL查询优化Presto的优缺点:
优点
Presto 与 Hive 对比,都能够处理 PB 级别的海量****数据分析,但 Presto 是基于内存运算,减少没必要的硬盘 IO,所以更快。**
能够连接多个数据源,跨数据源连表查,如从 Hive 查询大量网站访问记录,然后从 Mysql 中匹配出设备信息**。
缺点
虽然能够处理 PB 级别的海量数据分析,但不是代表 Presto 把 PB 级别都放在内存中计算的。而是根据场景,如 count,avg 等聚合运算,是边读数据边计算,再清内存,再读数据再计算,这种耗的内存并不高。但是连表查,就可能产生大量的临时数据,因此速度会变慢,反而 Hive此时会更擅长。
为了达到实时查询,可能会想到用它直连 MySql 来操作查询,这效率并不会提升, 瓶颈依然在 MySql,此时还引入网络瓶颈,所以会比原本直接操作数据库要慢。
Presto SQL优化
过滤条件优先使用分区字段:对于有分区的表,WHERE 语句中优先使用分区字段进行过滤。
GROUP BY 语句优化:合理安排 GROUP BY 语句中字段顺序对 ...
视图要点视图是一种虚拟存在的表,并且是动态生成的,只保存了SQL逻辑,不保存查询结果,它具有以下的一些特征:
虚拟表、和普通表一样使用
临时性:临时组建的表格,
可以重复利用
当我们遇到多个地方用到同样的查询结果或者该查询结果使用的SQL语句较复杂等情况时,我们就可以用视图来处理。
由此很容易让我们产生思考,既然视图并不保存数据,当我们修改视图中的数据时,会发生什么?
先来说结论:更新视图里面的数据,视图的更新实际上是对基本表增加或者删除记录,一般情况下都不建议对视图进行操作。
不管是update、delete还是insert,在常规情况下的修改都会直接修改原表中的数据,但是有一些特殊情况:
比如原表t有一列:column,在视图中,我们就create view v1 as select column c1, column c2 from t;此时v1中,有c1、c2两列全部对应原表的column列,此时如果insert(100,200),插入不一致的列,会有冲突导致插入失败。
总之,会导致数据不满足表定义限制时的修改就会失败。
其他不可更新的视图类型视图的可更新性和视图中查询 ...
本人15届蓝桥杯python组国一,并且不是计算机专业科班出身,本科是管科,学习了一些简单的python,硕士跨考金融,也没有进一步进行计算机的学习。比赛前也没进行太多的真题训练,只是在leetcode上练了几个常见算法,准备了一些可能会用到的算法代码,下面分享下我的一些考试经验:
准备考蓝桥杯,一些需要准备且牢记的要点
注意0,1等边界位置。在各种需要遍历数组的算法中,通常在边界处有不一样的处理方式,尤其要思考在数组最开头能否满足算法要求。
装饰器@cache可以加速,记录算过的东西,是很好用的减少时间的方法。
一切皆可发生,多加几个判断不费时间,判断比如输入为空列表,输入为只有1等特殊情况的处理方式。
蓝桥杯偏向于思维,算法较少。(根据往年经验,dp + 搜索 + 数论 + 枚举 就是所有知识点 )
时间复杂度过高,也是可以把代码写上去,得到一部分分数。
对于特殊值一定要优先考虑,可获得一部分分数。
没有思路的题,直接暴力枚举,可以获得一部分分数。
一些可能帮到大家的算法集合排序算法在蓝桥杯的题型里,它不会让你直接去实现某个算法,而是用一个实际案例中让你使用排序 ...
OLTP与OLAP概念在业务数据处理的早期,对数据库的写入往往对应着发生了一次真实的商业交易:银行转账(要从A账户扣100,并向B账户加100),支付工资等。后续随着数据库的应用越来越广泛,开始用来存储博客的评论、游戏进度等等,但是其访问模式没有变化,主要是执行基本的事务处理,对应于数据库记录的增删改查。这种访问模式被称为:联机事务处理(On-line transaction processing,OLTP)。
现在,数据库也开始越来越多地用于数据分析,通常,用于分析的查询需要扫描大量的数据(比如一个月,一个季度等),并聚合得到统计数据,帮助公司管理层做出更好的决策(business intelligence,商业智能 BI),区别于联机事务处理,这种侧重于分析场景的访问模式被称为:联机分析处理(On-Line Analytical Processing,OLAP)。
起初,同一个数据库既用于事务处理,也用于分析查询(例如,Mysql)。但是随着数据量的爆炸式增长,在90年代初,各个公司出现了一种 OLTP 与 OLAP 场景分离的趋势,即用专门的数据库来支撑决策分析的 OLAP场景任 ...
Hive宏参数设置1234567891011121314# 表示开启动态分区set hive.exec.dynamic.partition=true;# 表示动态分区模式:strict(需要配合静态分区一起使用)、nostrict# strict: insert into table students_pt partition(dt='anhui',pt) select ......,pt from students;hive> set hive.exec.dynamic.partition.mode=nostrict;# 表示支持的最大的分区数量为1000,可以根据业务自己调整set hive.exec.max.dynamic.partitions.pernode=1000;# 开启分桶set hive.enforce.bucketing=true;
Hive建表基础语法123456789101112131415161718192021222324CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name / ...