数据库
文章平均质量分 56
穷目楼
白日依山尽,黄河入海流。欲穷千里目,更上一层楼。
展开
-
通用的可扩展数据库设计-Entitty-Atribute-Value(EAV)模式
数据库的设计一般都是面向业务的的,这样能够提供最直接的建模,一般也能提供更快的性能。关系型数据库需要在建库时就固定库的结构,有哪些表,有哪些字段,字段的类型…这种”提前确定“在刻画现实世界的时候会存在一些蹩脚的地方,引出Entitty-Atribute-Value(EAV)模式的一个经典案例就是医学临床记录的存储。临床记录多种多样,有数不尽的指标,各个指标的值也不尽相同,血压,心率,咳嗽?显然是不同的指标,有不同的值。以二维表形式组织数据逻辑结构的关系表怎么表示?不断扩充列?显然是不现实的,最主要的原因是原创 2020-05-14 17:18:26 · 1689 阅读 · 0 评论 -
事物并发读写的可能:幻影读-不可重复读-脏读
伴随着事务的不同隔离等级,会出现不同的读取现象。ANSI/ISO 标准 SQL 92指出两个事务并发执行,一个事务读数据,另一个事务写数据时可能出现的三种情况。幻影读(Phantom reads)事务T1进行两次相同的查询,前后2次查询的结果由于事务T2插入了新数据产生了不同的结果。T1 &nb...原创 2020-04-22 09:39:57 · 829 阅读 · 0 评论 -
事务的隔离
事物的隔离性决定着并发事务处理时数据状态的正确与否,低级别的隔离可以获得更大的并发事务能力,但是同时意味着并发数据错误发生的可能性较高,相反,高级别的隔离可以降低并发数据错误发生可能性,但是也意味着事务的并发能力将会减弱,事务之间更容易互相阻塞。隔离性是ACID中的一员,ANSI/ISO SQL标准定义了四种隔离等级,由高到低分别是:串行化(Serializable)最高隔离等级,事务串行...原创 2020-04-21 17:15:22 · 111 阅读 · 0 评论 -
事务的四大性质-ACID
事务具有四大性质,其包括可靠性,一致性,隔离性以及持久性,这四大性质一起保证了数据的可靠,一致,完整。原子性(Atomicity)原子性保证了事务的不可再分,一个事务中的操作或者全部成功,或者全部失败,不会出现部分成功,部分失败的情况。如果事务失败,则数据将会处于事务开始前的状态。一致性(Consistency)一致性保证了事务成功执行后,数据将会从一种合规的状态进入另一种合规的状态,不能...原创 2020-04-10 09:58:42 · 1890 阅读 · 0 评论 -
JPA中的锁
JPA 2.0开始同时提供了乐观锁(optimistic locking)和悲观锁(pessimistic locking)。乐观锁(optimistic locking)在数据的改变被提交之前,persistence provider检查自从上次读取数据后数据是否被其他事务修改,删除。实体有一个版本属性,与之对应的数据库表中也有一列字段用来表示版本,每次数据被变更,版本号将会被增加,事务在...原创 2020-04-03 09:31:41 · 304 阅读 · 0 评论 -
MongoDB的文件系统GridFs
MongoDB发展到3.X时代,其一份document的最大尺寸限制为16M,所以超过这个大小的文件是不能作为一个document存储的。MongoDB对于此种需求,提供过了GridFS进行应对。GridFS把文件分割成尺寸较小的块后,再把每一个小块作为一个单独的document进行存储,2.4.10之后的版本默认的块大小为255K,之前的版本为256K。当从GridFS中提取数据时,Mongo...原创 2020-04-02 17:03:01 · 439 阅读 · 0 评论 -
MongoDB的比较操作符$in
$in操作符用于选择某个域的值等于其后指定的数组中的任意值的文档。{ field: { $in: [<value1>, <value2>, ... <valueN> ] } }域本身可以是数组,此时$in将会选择域数组中有至少任意一值等于其后指定的数组中的任意一个值的文档。单值域的$in匹配db.inventory.find( { qty: { $in...原创 2020-04-01 09:49:46 · 5161 阅读 · 0 评论 -
避免Hive和Spark生成HDFS小文件
HDFS是为大数据设计的分布式文件系统,对大数据做了存储做了正对性的优化,但却不适合存储海量小文件。Hive 和 spark-sql是两个在常用的大数据计算分析引擎,用户直接以SQL进行大数据操作,底层的数据存储则多由HDFS提供。对小数据表的操作如果没做合适的处理则很容易导致大量的小文件在HDFS上生成,常见的一个情景是数据处理流程只有map过程,而流入map的原始数据数量较多,导致整个数据处...原创 2020-03-25 09:11:23 · 734 阅读 · 0 评论 -
什么是事务
事务是一组不可再分的操作集合,这组操作要么全部成功,要么全部失败,不可能出现部分成功,部分失败的情况。事务是作为一个不可再分的单元,或者成功,或者失败的。事务用来保证系统中数据的完整性,一致性。比如一个银行系统转账,转账的两个账户的资金总是处于一种平衡状态,事务保证了不会出现一个账户资金有转出,另一个账户却没有资金转入的情况。如果资金在转出一个账户的操作成功后,另一个账户的收款操作却失败了,事务...原创 2020-03-21 21:44:04 · 155 阅读 · 0 评论 -
Hive拉拉扯扯的order by,sort by,distribute by, cluster by
Hive支持两个层面的排序:全局排序部分排序全局排序用order by col [ASC | DESC]实现,效果和传统的RDMS一样,保证最后的数据全局有序。部分排序用sort by col [ASC | DESC]实现,保证同一个reducer处理的数据有序,对于结果数据则表现为局部有序。Hive对用户提供的同样是SQL,但底层实现却和传统数据库有天壤区别,底层实现默...原创 2020-02-18 20:10:57 · 434 阅读 · 0 评论 -
PL/SQL 日期类型
在PL/SQL中共有三个日期类型:DATE: 表示日期和时间,精度为秒级别,没有时区信息,是Oracle中最古老和常用的日期类型TIMESTAMP: 和DATE类似,但是精度可以达到纳秒级别,且可以选择包含时区信息INTERVAL:与DATE和TIMESTAMP表示时间上的一点不同,INTERVAL表示时间段,可以选择以年,月,日,秒来表示时间区别 today_date D原创 2019-11-28 23:00:42 · 2717 阅读 · 0 评论 -
PL/SQL 数值类型
PL/SQL中 提供了各种各样的数值类型:NUMBER,PLS_INTERGER,SIMPLE_INTEGER, INTEGER,BINARY_FLOAT,BINARY_DOUBLE,FLOAT,DECIMAL。NUMBER, PLS_INTERGER 是最常用的数值类型。NUMBER真正的十进制类型,可以表示整数和小数,Oracle中唯一的平台独立的数值类型,可以用于资金计算。浮原创 2019-11-28 23:01:03 · 681 阅读 · 0 评论 -
PL/SQL 字符串类型
PL/SQL常用的数据类型主要有:字符串字符串字符串在PL/SQL中共有三类:定长字符串:字符串右边用空格填充直到指定长度为止。CHAR,NCHAR属于这类变长字符串():指定字符串的最大长度(小于32767),可以存储小于指定长度的字符串,不会有空格填充发生。VARCHAR2, NVARCHAR2属于这类字符大对象:能够存储高达128TB大小的内容的可变字符串类型。 CLOB, 和NCLOB原创 2019-11-28 23:01:13 · 1703 阅读 · 0 评论 -
Hive修改表结构
Hive修改列选项CASCADE|RESTRICT默认为RESTRICT仅改变表,CASCADE同时改变分区。修改列ALTER TABLE table_name [PARTITION partition_spec] CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFT...原创 2019-08-29 23:49:00 · 1305 阅读 · 0 评论 -
MySQL char与varchar
MySQL中char与varchar都是字符类型,但是其在存储,检索方式,最大允许长度,尾部空字符处理方面都有所不同。char与varchar在声明时都可以指明一个长度值表示允许存储的最大字符数,例如:char(10) varchar(255)。strict SQL模式在没被激活的情况下,Mysql允许存储大于char(varchar)声明的最大长度的字符,mysql会把字符自动裁剪到符合长度要原创 2017-02-07 09:10:56 · 410 阅读 · 0 评论 -
MySQL在数据存储方面的限制
MySQL对于支持的数据库的数量,表的数量,表的大小以及表中列的个数和每行允许的大小方面分别都有着自己的一些规定。 数据库的数量MySQL本身没有数据库数量的限制,具体的数量限制取决于底层操作系统对目录数量的支持程度。表的数量限制MySQL本身没有对表数量的限制,具体的数量限制取决于底层操作系统对文件数量的支持程度。一些存储引擎会有自己的额外限制,InnoDB最大允许有40亿张表。表大小的限制My原创 2017-02-07 09:12:16 · 4511 阅读 · 0 评论 -
PL/SQL 的基本结构
PL/SQL是块结构语言。块由DECLARE,BEGIN,EXCEPTION,END关键字划分,并且划分为3个不同的区域:声明区域 该区域声明变量,常量以及其他程序元素执行区域 该块的执行主体,该区域包括了块执行是将被运行的语句异常区域 该区域可用于捕获执行区域运行时产生的各种异常 3个区域中,只有执行区域是必须的,其他两个区域都是可选的[DECLARE] D原创 2017-02-09 09:43:02 · 763 阅读 · 0 评论 -
PL/SQL 过程与函数
过程和函数都属于过程过程是执行特定的任务(动作)的命名块。过程封装了业务逻辑,随后在应用层和数据层都可调用之前已经定义的过程。CREATE [OR REPLACE] PROCEDURE [schema.]name[( parameter [IN] [OUT] data_type[, parameter [IN] [OUT] data_type...] ) ][AUTHID DEF原创 2017-02-09 15:39:08 · 619 阅读 · 0 评论 -
PL/SQL 变量
变量的概念在PL/SQL中和其他语言里的概念一致。 变量声明的语法结构为:variable_name datatype [:= initialized_value];变量名和变量的数据类型是必须的,在声明时就初始化则是可选的,对变量的初始化赋值,也可以留到块的执行区域离进行。规则PL/SQL的变量名有以下特点: 1. 最大的长度为30个字符 2. 首字符必须是字母原创 2017-02-10 09:53:21 · 472 阅读 · 0 评论 -
PL/SQL 条件判断
PL/SQL 支持不同方式的条件判断,主要分为2大类:IFCASEIFIF-THENcondition求值为TRUE,sequence_of_statements将会执行。IF condition THEN sequence_of_statements;END IF;IF-THEN-ELSEcondition求值为TRUE,sequence_of_if_statements将会执行,否原创 2017-02-15 16:32:51 · 2243 阅读 · 0 评论 -
PL/SQL 循环
PL/SQL 提供三种不同的循环:FOR 循环简单循环WHILE循环FOR 循环FOR循环适用于在循环前就已经明确知道需要循环的具体次数的情况。FOR循环有两种类型:FOR 数值循环FOR 光标循环FOR 数值循环FOR数值循环通过指定一个数值区间来定义:FOR loop_counter IN [REVERSE] lower_bound .. higher_boundLOOP原创 2017-02-16 10:45:58 · 696 阅读 · 0 评论 -
PL/SQL 标签与GOTO语句
标签标签是一个命名标记,格式为label>>标签可以用于过程,函数GOTO语句GOTO语句结合标签使用可以实现无条件的跳转。BEGIN GOTO label1; statments1; > statements2;END;statments1不会被执行,因为GOTO语句直接把程序流跳转到了statements2处。GOTO的限制不能原创 2017-02-16 17:08:58 · 1941 阅读 · 0 评论 -
PL/SQL 异常处理
异常用于表示程序运行过程中发生的错误。每个异常都包含错误码和错误消息描述,可以分别用SQLCODE和SQLERRM内建函数提取。异常处理异常可由用户主动抛出,也可能由数据库自行抛出,用户可以选择捕获特定的异常,或捕获所有异常,或者不进行异常处理。捕获异常PL/SQL中的块结构中包含可选的异常处理部分,通过异常处理部分可以实现对同块的执行区域抛出的异常(包括其中的子块未处理向外抛出的异常)进行处理。流原创 2017-02-20 11:11:32 · 1274 阅读 · 0 评论 -
PL/SQL 记录类型
PL/SQL支持符合类型,记录(record)是其中一种。记录表示了一组相关的数据集合,每一个数据项被成为一个域(field),每个域都有自己的数据类型与名称。声明记录记录可以通过基于数据库对象声明,也可以自定义。基于数据库对象声明记录记录类型变量可以直接基于表,视图,光标的属性%ROWTYPE声明,声明的记录类型变量将会有着和对应的数据库对象一样的结构,比如有着和表的列对应的域,每个域的名字和类型原创 2017-02-20 17:16:10 · 781 阅读 · 0 评论 -
PL/SQL 集合类型
PL/SQL支持集合的概念,在PL/SQL中集合就是一维数组,其可存储一个或多个元素,或者直接为空,通过索引可以访问这些元素,集合里的元素必须是同样的类型。集合类型属于复合类型,除了作为数据结构本身的需要,集合类型的使用有益于提高程序的效率。集合类型的类别PL/SQL共有三类集合类型:关联数组, 嵌套表, 可变长数组。关联数组关联数组是PL/SQL最早提供的集合类型,索引可以数值也可以是字符串,只能原创 2017-02-21 16:32:18 · 838 阅读 · 0 评论 -
PL/SQL 游标
游标是一个指向存储有SELECT或DML语句处理信息的私有SQL区域的指针。在使用SQL时数据库在大部分时候自动维护游标,但是也可以人为的操作游标。显式的定义游标通过在DECLARE区域使用CURSOR IS声明游标,和表与视图一样,可以基于游标声明记录类型的变量。DECLARE CURSOR cursor_name IS SELECT *原创 2017-02-23 10:01:25 · 344 阅读 · 0 评论 -
PL/SQL 的包
PL/SQL包是一组相关的过程,函数,类型,游标等元素的组织单元,包存储于数据库中。包提升了PL/SQL的代码组织逻辑,使程序的组织更有逻辑性,也使PL/SQL的封装性更强,对外暴露接口,隐藏具体的实现细节,同时由于包在第一次使用时就被加载入内存,包级别的数据就是一个会话(SESSION)级数据,所以对程序性能也有提升,此外由于不同程序组件直接看到的只是彼此暴露的接口,所以如果修改了包的实现逻辑,依原创 2017-02-24 10:16:23 · 609 阅读 · 0 评论 -
PL/SQL 内建函数
一些内建函数可以被用于执行各种各样的操作。原创 2017-02-27 17:14:10 · 346 阅读 · 0 评论 -
在Oracle中,序列(Sequence)常被用于实现自增主键
在Oracle中,序列(Sequence)常被用于实现自增主键。创建一个序列CREATE SEQUENCE sequence_name MINVALUE value MAXVALUE value START WITH value INCREMENT BY value CACHE value;MAXVALUE的默认值为9999999999999999999999999...原创 2019-10-31 22:34:20 · 279 阅读 · 0 评论 -
世界上最高级的开源关系数据库PostgreSQL
提起开源的关系型数据库,大部分人脱口而出的就是MySQL,如果不考虑开源还是商业的问题,再列举几个额外的数据库,那么接下来的大概率是Oracle,MS SQLServer。少有人知道或回去提及PostgreSQL,也被简称为PgSQL或者Postgres,这是一个产品在一定圈子里流行度的体现,但抛开流行才是好,相信小众也有美,从产品本身看,PostgreSQL其实是一个优秀的数据库,正如社区所言“...原创 2019-09-01 16:36:40 · 843 阅读 · 0 评论 -
Sql Server select group by之外的列
有时候会有通过一个或多个列进行group by操作,然而想要select 的却是 group by 之外的列(也许这些列的值都一样)的需求。一种trick:SELECT * FROM ( SELECT *, row_number () OVER ( partiti原创 2017-02-15 09:29:05 · 2077 阅读 · 0 评论 -
SQL 默认排序 ?
select * from table;查询的数据的默认顺序是什么?插入数据的顺序?主键的顺序?….返回的数据的顺序在没有order by的情况下,完全依赖于特定的情况,可能影响输出顺序的情况很多:包括数据库类型,数据库的版本,存储引擎,存储引擎的版本,是否查询时有对数据的修改,数据是否转移过机器,数据的索引状态…SQL里,数据本身没有内在的顺序,如果没有order by,数据的顺序是未知的,不稳定原创 2017-02-16 20:59:40 · 8226 阅读 · 0 评论