摘要:读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。
前言
很多人都在讨论数据的指数型增长,以及我们将会有比想象的还要大的数据量。但是,很少有人从数据库的角度谈论这个问题。随着数据量的暴涨,数据库也需要随之升级。这也是为什么既要了解如何分析海量数据,也要了解数据库如何存储这些数据变得越来越重要。
AACID(Atomicity, Consistency, Isolation, Durability)
通常用于SQL数据库,用来形容数据库事务的属性
补充:
Atomicity原子性:一个事务的所有操作,要么全部完成,要么全部不完成。不会结束在中间某个阶段
Consistency一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。表示数据库写入的资料必须完全符合所有的预设规则
Isolation隔离性:数据库允许多个并发事务同时对其数据进行读写和修改能力,隔离性可以防止多个事务并发执行时由于交叉执行而导致的数据不一致。事务的隔离级别包括读未提交(Read uncommitted)、读提交(read committed)、可重复读(repeatable read)和串行化(Serializable)
Durability持久性:对数据的修改是永久的,即使系统故障也不会丢失因为之前面试有被问到过数据库的事务隔离级别,所以在这里加深一下印象:
未提交读:能读取到其他会话中未提交事务修改的数据(很少使用)
已提交读:只能读取到已经提交的数据,数据的读取都是不加锁的,但是数据的写入、修改和删除是需要加锁的
可重复读:在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。
串行读:完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞
悲观锁:对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,因此,在整个数据处理过程中,将数据处于锁定状态。往往依靠数据库提供的锁机制
乐观锁:大多是基于数据版本( Version )记录机制实现。何谓数据版本?即为数据增加一个版本标识,在基于数据库表的版本解决方案中,一般是通过为数据库表增加一个 “version” 字段来实现。读取出数据时,将此版本号一同读出,之后更新时,对此版本号加一。此时,将提交数据的版本数据与数据库表对应记录的当前版本信息进行比对,如果提交的数据版本号大于数据库表当前版本号,则予以更新,否则认为是过期数据。
Aggregate 聚合
一组可以被当做一个单元的领域对象。适合作为大型分布式系统上的数据存储单元。
BASE(Basic Availability, Soft State, Eventual Consistency)
用来形容数据库事务的属性,尤其是需要管理非结构化数据的NoSQL数据库。约等于放弃CAP属性中的一致性。
Basic Availability:不保证时时刻刻的可用性
Soft State:系统状态可能在没有输入的情况下会发生改变,因为需要达到最终的一致性
Eventual Consistency:系统会在一段时间之后最终达成一致
B-树
所有的叶节点都在同一个高度,所有的非叶节点都包含n~2n个子节点的数据结构。它用于优化读写大量数据块或是大量读操作。
云原生数据库
在云上构建并运行的数据库
Complex event processing 复杂事件处理
从多个流中有组织的收集数据进行分析和规划的过程
Consistency 一致性
数据库事务的四个基本属性之一,指如果一个事务失败了,那么数据将会返回至最初的状态。如果成功了,那么将新建一个数据状态。
CAP(Consistency,Availability, Partition Tolerance)
这个概念通常用于提醒开发人员在数据库设计中所需要作出的妥协。
Consistency: 确保分布式集群中每一个节点返回相同的且是最近成功写入的数据D
Availability: 每个没有当掉的节点在一段时间内对每一个读写请求作出相应
Partition Tolerant: 尽管存在网络分区,系统仍然能正常运行并保持一致性
Database clustering 数据库集群
将两个或多个实例连接到数据库,通常用于容错,负载均衡和并行处理。
Data management数据库管理
一个组织存储,运行和分析数据的完整的生命周期。
Data mining 数据挖掘
在大量数据中发掘模式,并将其转化为可以理解的形式的过程
DBMS 数据库管理系统
一套用于管理终端用户和数据库之间的数据的软件和工具
Distributed system 分布式系统
一组独立的计算机协作运行,使其看上去好像是一台计算机在工作。
Document Store
从文档而不是定义好的table中获取数据的一种数据库,通常会将文档数据以一种可以搜索的方式展示出来。
ElasticSearch 弹性搜索
一个基于JAVA的搜索引擎,可以将近实时的搜索和索引文件,能够自动索引JSON文档。
Fault tolerance 容错性
系统能够在不干扰别的系统的情况下应对硬件或是软件故障。
Graph store
一种用于处理包含大量关联的数据的数据库,比如社交图,标签系统,或是一切富链接领域。它还常用于路由和定位服务。
High availability 高可用性
指及时出现组件崩溃,也能持续提供可用资源的系统。它可以通过硬件冗余,软件方法和其它特殊的策略来实现。
Hybrid transaction/analytical processing
一种应用的架构,该架构据说突破了事务处理和分析的高墙,从而支持实时决策制定。
In-memory
一个通用的生产用语,通常指将数据加载到RAM或是闪存而不是硬盘的数据管理工具
Join
SQL术语,在关系型数据库中将多个数据库用一些列关联起来
Journaling
指实时的将数据库中的所有数据更新写入日志。如果原始数据损坏或是删除,可以用生成的日志恢复。
JPA(Java Persistent API)
基于JAVA的用于获取,管理和持久化数据的实现。
Key-value store
一种将数据以键值对的形式存储的数据库。它用于处理大量小型的,连续的读写操作。
MapReducer
Google创建的一种具有高可扩展性的编程模型。
MVCC 多版本同步控制
一种用于处理同时读写数据库的策略。
InnoDB中MVCC的实现N
一般我们认为MVCC有下面几个特点:
1.每行数据都存在一个版本,每次数据更新时都更新该版本
2.修改时Copy出当前版本随意修改,个事务之间无干扰
3.保存时比较版本号,如果成功(commit),则覆盖原记录;失败则放弃copy(rollback)InnoDB的默认事务隔离级别为可重复读(RR),使用行级锁
Innodb为每行记录都实现了三个隐藏字段:6字节的事务ID(DB_TRX_ID ),7字节的回滚指针(DB_ROLL_PTR),隐藏的ID
1.事务以排他锁的形式修改原始数据
2.把修改前的数据存放于undo log,通过回滚指针与主数据关联
3.修改成功(commit)啥都不做,失败则恢复undo log中的数据(rollback)
NoSQL
不同于传统的关系型数据库结构,结合了传统SQL以外的查询手段的一类数据库。
ORM
使用面向对象编程语言而非数据库语言将数据在不兼容的系统之间进行转化的一种工具。
Parallelism
操作系统能够相互协作来解决一个问题的状态
Sharding 分表
也可以成为水平分割,将数据库分割为几个片段,通常用来提升数据库的速度和可靠性
Wide-column store
又被称为大数据仓库,这些数据库以记录的形式存储数据,而且能够保存大量的动态列。列的名称和键不是固定的
原文链接在这里。
其中还有一些新兴的名词在文中并没有提及,一方面是因为不熟悉感觉翻译会有偏差,另一方面是希望面向面试来了解相关的词汇。
后序还会在这里更新一些其他的感觉比较重要的数据库概念。
参考文件Innodb中的事务隔离级别和锁的关系
ACID vs BASE
理解CAP理论
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/17676.html
摘要:因此,误解几乎是与之俱来的。这是完全错误的。就像所强调的,对于一个被称作的来说,状态转移管理是一个必须要完成的需求。你可以将其称为或是,但是请不要把它叫做。 2000年的时候,Douglas Crockford声明JavaScript是最被误解的编程语言。这种误解来源于不良的命名规范,错误设计,非标准模式等等。因此,误解几乎是与之俱来的。 我也在关于Restful架构上发表了一个相似的...
摘要:是指可能导致程序终止的非常严重的时间。具有最高的级别,旨在关闭中的日志功能。因此为每一个消息选择一个合适的日志级别是非常重要的。日志的个小建议将日志访日代码块它能显著的减少因为字符串拼接而带来的性能的影响。 前言 首先,这篇文章没有进行任何的日志功能的详细介绍,而是对日志提出了几种最佳实践。适合对日志记录有所了解的同学阅读。下面是正文: JAVA日志管理既是一门科学,又是一门艺术。科学...
摘要:否则它就会用新的值替代当前值。在这种情况下,锁可能会优于原子变量,但在实际的争用级别中,原子变量的性能优于锁。在中引入了另外一个构件。 题目要求 在我们深入了解CAS(Compare And Swap)策略以及它是如何在AtomicInteger这样的原子构造器中使用的,首先来看一下这段代码: public class MyApp { private volatile int ...
阅读 2336·2021-11-24 11:16
阅读 2022·2021-09-30 09:47
阅读 1995·2021-09-10 10:51
阅读 1316·2019-08-30 14:08
阅读 3133·2019-08-30 13:47
阅读 1520·2019-08-30 13:02
阅读 3227·2019-08-29 12:29
阅读 3178·2019-08-26 17:05