Tag Archives | theory

【译】数据库事务隔离级别

看到wikipedia中文关于数据库相关的几个经典条目有点老旧,尤其和英文条目相比。确定开始翻译其中几篇,先从事务隔离等级开始。格式采用维基Sandbox发布后的格式。翻译完后自己校对过几遍,质量还可以。:-)

已经在中文维基发布。

翻译的中文条目地址:事务隔离等级

对应的英文条目地址:Isolation (database systems)

欢迎大家指正,可以直接在维基上对应条目更新的!。

有些郁闷在英文的个人主页下面,里面的引用词条的链接都很正常但是维基中文发布后,里面的引用词条都不可用了。初步判断是中文词条和英文词条不是一个库。为了内部词条链接可用,转到博客的是我的英文的个人主页内的格式。

事务隔离(isolation)定义了数据库系统中一个操作产生的影响什么时候以哪种方式可以对其他并发操作可见。隔离是事务ACID (原子性、一致性性、隔离性、持久性)四大属性中的一个重要属性。

 

并发控制(Concurrency control)

并发控制描述了数据库处理隔离以保证数据正确性的机制。为了保证并行事务执行的准确执行数据库和存储引擎在设计的时候着重强调了这一点。典型的事务相关机制限制数据的访问顺序(执行调度)以满足可序列化可恢复性。限制数据访问意味着降低了执行的性能,并发控制机制就是要保证在满足这些限制的前提下提供尽可能高的性能。经常在不损害正确性的情况下,为了达到更好的性能,可序列化的的要求会减低一些,但是为了避免数据一致性的破坏,可恢复性必须保证。

两阶段锁是关系数据库中最常见的提供了可序列化可恢复性的并发控制机制,为了访问一个数据库对象,事务首先要获得这个对象的 。对于不同的访问类型(如对对象的读写操作)和锁的类型,如果另外一个事务正持有这个对象的锁,获得锁的过程会被阻塞或者延迟。

隔离级别(Isolation levels)

数据库事务的ACID四个属性中,隔离性是一个最常放松的一个。为了获取更高的隔离等级,数据库系统的 机制或者多版本并发控制机制都会影响并发应用软件也需要额外的逻辑来使其正常工作。

很多DBMS定义了不同的“事务隔离等级”来控制锁的程度。在很多数据库系统中,多数的数据库事务都避免高等级的隔离等级(如可序列化)从而减少对系统的锁定开销。程序员需要小心的分析数据库访问部分的代码来保证隔离级别的降低不会造成难以发现的代码bug。相反的,更高的隔离级别会增加死锁发生的几率,同样需要编程过程中去避免。

ANSI/ISO SQL定义的标准隔离级别如下。
[......]

阅读全文

Tags: ,

Comments { 0 }

java 并发相关理论整理

在整理java并发相关内容的时候发现,很多都要有些前提或者术语,尽管整理这些是以基于工程或者实践的角度。但是这些更像定义、定理的东西也是理解了,后面基于其的实现和应用的理解才足够完整和有依据。

一、?线程安全

当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的调度和交替运行,并且不需要额外的同步及在调用方代码不必做其他的协调,这个类的行为仍然是正确的,那么这个类就是线程安全的。

显然只有资源竞争时才会导致线程不安全,因此无状态对象永远是线程安全的

二、Happens-before法则

Java存储模型有一个happens-before原则,就是如果动作B要看到动作A的执行结果(无论A/B是否在同一个线程里面执行),那么A/B就需要满足happens-before关系。

happens-before完整规则:

  • 同一个线程中的每个Acti[......]

阅读全文

Tags: , ,

Comments { 0 }

一种提高网站分类准确性的方法

在工作中提出的一种思路,尝试通过汇集用户在某些书签网站对网站做的tag信息来提高网站分类的准确性。Improve the classification accuracy of WRS by the automatically accumulated human knowledge

@todo 在文章中对主要思路的描述。

Tags: , , ,

Comments { 0 }