??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲综合精品一区二区,国产精品免费精品自在线观看,亚洲精品黄色http://www.aygfsteel.com/zh-qi/archive/2009/01/06/250054.htmlW看风云W看风云Tue, 06 Jan 2009 02:25:00 GMThttp://www.aygfsteel.com/zh-qi/archive/2009/01/06/250054.htmlhttp://www.aygfsteel.com/zh-qi/comments/250054.htmlhttp://www.aygfsteel.com/zh-qi/archive/2009/01/06/250054.html#Feedback0http://www.aygfsteel.com/zh-qi/comments/commentRss/250054.htmlhttp://www.aygfsteel.com/zh-qi/services/trackbacks/250054.html阅读全文
]]>- hibernate扚w插入数据http://www.aygfsteel.com/zh-qi/archive/2008/12/11/245720.htmlW看风云W看风云Thu, 11 Dec 2008 08:10:00 GMThttp://www.aygfsteel.com/zh-qi/archive/2008/12/11/245720.htmlhttp://www.aygfsteel.com/zh-qi/comments/245720.htmlhttp://www.aygfsteel.com/zh-qi/archive/2008/12/11/245720.html#Feedback0http://www.aygfsteel.com/zh-qi/comments/commentRss/245720.htmlhttp://www.aygfsteel.com/zh-qi/services/trackbacks/245720.html
hibernate本n不具备插入批量数据的能力Q因此开发中量用?br />
下面是一个测试例子:

public void testadd()
{
Session session=HibernateUtils.getSession();
Transaction tx=null;

try
{
tx=session.beginTransaction();

for(int i=0;i<2000;i++)
{
Student stu=new Student();
stu.setName("stu"+i);
stu.setAddr("addr"+2*i);
session.save(stu);
//d20条以后,强制入库
//clear()清空~存
//postgres数据库的隔离U别是已提交?Read committed)Q?br />
//所以flush以后Q数据看不到Q只有commit后才能看到数据,
//如果p|Qrollback,前面的flush的数据不会入?/span>

if(i%20==0)
{
session.flush();
session.clear();
}
}
tx.commit();

}catch(Exception ex)
{
ex.printStackTrace();
tx.rollback();

}finally
{
HibernateUtils.closeSession(session);
}

}
我用的数据库是postgres,通过flush把数据强制入库,然后通过session.clear()清空~存中的实体对象Q防止jvm内存溢出Q速度q行?br />
不过没有大批量的dQ如果大扚w的添加可能要考虑使用JDBC,q不行的话,估计得用的数据库本w自带的快速导入工?q不行的话,没话_换数据库Q哈哈?/span>

]]> - postgres隔离U别http://www.aygfsteel.com/zh-qi/archive/2008/12/11/245655.htmlW看风云W看风云Thu, 11 Dec 2008 03:48:00 GMThttp://www.aygfsteel.com/zh-qi/archive/2008/12/11/245655.htmlhttp://www.aygfsteel.com/zh-qi/comments/245655.htmlhttp://www.aygfsteel.com/zh-qi/archive/2008/12/11/245655.html#Feedback0http://www.aygfsteel.com/zh-qi/comments/commentRss/245655.htmlhttp://www.aygfsteel.com/zh-qi/services/trackbacks/245655.html
多版本ƈ行控ӞMulti-Version Concurrency Control QMVCCQ)是用于提高数据库在一个多用户环境下性能的高U技术。Vadim Mikheev ?nbsp;Postgres 提供了MVCC的实现?br />

介绍

与其他用锁来进行ƈ行控制的数据库系l不同,Postgres 利用多版本模型来l护数据的一致性。这意味着当检索数据库Ӟ每个事务都看C个数据的一D|间前的快照(一?nbsp;数据库版本)Q而不正在处理的数据当前的状态。这P如果Ҏ个数据库会话q行 事务隔离Q就可以避免一个事务看到因为其它ƈ行的事务更新同一行数据而导致的不连贯的数据?nbsp;
多版本和锁定模型的主要区别是?nbsp;MVCC 里,Ҏ索(读)数据的锁要求与写数据的锁要求不冲H,所以读不会d写,而写也从不阻?br />


▲事务隔?br />

ANSI/ISOSQL 用三个必dq行的事务之间避免的现象定义了四个别的事务隔离。这些不希望发生的现象是Q?nbsp;
L染(dirty readsQ?nbsp;
一个事务读取了被另一个未提交的ƈ行的事务写的数据?nbsp;
不可重复的读Qnon-repeatable readsQ?nbsp;
一个事务重新读取前面读取过的数据,发现该数据已l被另一个已提交的事务修改过?nbsp;
错误dQphantom readQ?nbsp;
一个事务重新执行一个查询,q回一套符合查询条件的行,发现q些行中插入了被其他已提交的事务提交的行?nbsp;
q四U隔ȝ别和对应的特性在下面描述?nbsp;
?nbsp;13-1. Postgres 隔离U别



▲读已提交隔ȝ?br />

d提交QRead CommittedQ是Postgres 里的~省隔离U别。当一个事务运行在q个隔离U别Ӟ一个查询只能看到查询开始之前的数据而永q无法看到脏数据或者是在查询执行时其他q行的事务提交做的改变?nbsp;
如果一个正在执行一?nbsp;UPDATE 语句Q或?nbsp;DELETE 或?nbsp;SELECT FOR UPDATEQ的查询q回的行正在被另一个ƈ行的未提交的事务更新Q那么第二个试图更新此行的事务将{待另一个事务的提交或者回南如果发生了回卷Q等待中的事务可以l修Ҏ行。如果发生了提交Qƈ且此行仍然存在;也就是说Q没有被另一个事务删除)Q这个查询将对该行再执行一便以查新行版本是否满x询搜索条件。如果新行版本满x询搜索条Ӟ那么该行被更新Q或删除或被标记为更斎ͼ?nbsp;

注意 SELECT ?nbsp;INSERT 语句执行的结果(在一个查询里Q将不会被ƈ行事务媄响?br />

可串行化隔离U别
可串行化QSerializableQ提供最高别的事务隔离。当一个事务处于可串行化别,一个查询只能看到在事务开始之前提交的数据而永q看不到脏数据或事务执行中其他ƈ行事务提交的修改。所以,q个U别模拟串行事务执行Q就好象事务被一个接着一个那样串行的Q而不是ƈ行的执行?nbsp;
如果一个正在执行一?nbsp;UPDATE 语句Q或?nbsp;DELETE 或?nbsp;SELECT FOR UPDATEQ的查询q回的行正在被另一个ƈ行的未提交的事务更新Q那么第二个试图更新此行的事务将{待另一个事务的提交或者回南如果发生了回卷Q等待中的事务可以l修Ҏ行。如果发生一个ƈ行的事务的提交,一个可串行化的事务回Pq返回下面信息?nbsp;

ERROR: Can´t serialize access due to concurrent update

因ؓ一个可串行化的事务在可串行化事务开始之后不能更改被其他事务更改q的行?nbsp;
注意: SELECT ?nbsp;INSERT 语句执行的结果(在一个查询里Q将不会被ƈ行事务媄响?br />


▲锁和表

Postgres 提供多种锁模式来控制对表中数据的q行讉K。有些锁模式是在语句执行之前由Postgres 自动施加的,而其他的提供用来由应用用的。一个事务里要求的所有锁模式Q除?nbsp;AccessShareLockQ都是在整个事务期间保有的?nbsp;
除了锁以外,短期的共?/span>/排他销也在׃n的缓冲池中用于控制对表页面的?/span>/写访问。销在一条记录抓取或者更新后马上被释放?nbsp;


表?br />

AccessShareLock
一个内部锁模式Q进行查询时自动施加在被查询的表上。语句执行完成后QPostgres 释放q些锁?nbsp;

只与 AccessExclusiveLock 冲突?nbsp;

RowShareLock
?nbsp;SELECT FOR UPDATE 和用?nbsp;IN ROW SHARE MODE ?nbsp;LOCK TABLE 语句要求?nbsp;

?nbsp;ExclusiveLock ?nbsp;AccessExclusiveLock 模式冲突?nbsp;

RowExclusiveLock
?nbsp;UPDATE, DELETE, INSERT 和用于IN ROW EXCLUSIVE MODE ?nbsp;LOCK TABLE 语句要求?nbsp;

?nbsp;ShareLockQShareRowExclusiveLockQExclusiveLock ?nbsp;AccessExclusiveLock 模式冲突?nbsp;


ShareLock
?nbsp;CREATE INDEX 和用于IN SHARE MODE ?nbsp;LOCK TABLE 语句所要求?nbsp;

?nbsp;RowExclusiveLockQShareRowExclusiveLockQExclusiveLock ?nbsp;AccessExclusiveLock 模式冲突?nbsp;

ShareRowExclusiveLock
被用?nbsp;IN SHARE ROW EXCLUSIVE MODE ?nbsp;LOCK TABLE 语句要求?nbsp;

?nbsp;RowExclusiveLockQShareLockQShareRowExclusiveLockQExclusiveLock ?nbsp;AccessExclusiveLock 模式冲突?nbsp;

ExclusiveLock
被用?nbsp;IN EXCLUSIVE MODE ?nbsp;LOCK TABLE 语句要求?nbsp;

?nbsp;RowShareLockQRowExclusiveLockQShareLockQShareRowExclusiveLockQExclusiveLock ?nbsp;AccessExclusiveLock 模式冲突?nbsp;

AccessExclusiveLock
?nbsp;ALTER TABLEQDROP TABLEQVACUUM ?nbsp;LOCK TABLE 语句要求?nbsp;

?nbsp;RowShareLockQRowExclusiveLockQShareLockQShareRowExclusiveLockQExclusiveLock ?nbsp;AccessExclusiveLock 模式冲突?nbsp;



注意Q?br />
只有 AccessExclusiveLock d SELECT Q没?nbsp;FOR UPDATEQ语句?br />
行?br />
当某行的一个内部字D被更新Q或删除或标Cؓ更新Q时要求使用q些锁。Postgres 在内存里不做关于已更新的行的M记忆Q因而对锁定的行数没有Q何限Ӟ也没有锁定递增?nbsp;
但是Q要注意 SELECT FOR UPDATE 会更Ҏ选定的行以标记它们,因而会D盘写动作?nbsp;

行别的锁不影响数据查询。它们只是用于阻塞对同一行的写?br />


锁和索引

管 Postgres 提供对表数据讉K的非d的读/写,但ƈ非所有Postgres 里实现的索引讉K模式都能够进行非d?/span>/写?nbsp;
各种各样的烦引类型按照下面方法操作:

GiST ?nbsp;R-Tree 索引
׃n/排他的烦引锁用于读/写访问。锁在语句完成后释放?nbsp;
Hash Q散列)索引
׃n/排他的页面锁用于读/写访问。锁在页面处理完成后释放?nbsp;

面U锁比烦引的锁提供了更好的q行性但是容易生死锁?nbsp;

Btree
短期的共?/span>/排他的页面的销用于?/span>/写访问。销在烦引记录被插入/抓取后立即释放?nbsp;
Btree 索引提供了无死锁条g的最高的ƈ行性?nbsp;


应用层的数据完整性检?br />

因ؓ?nbsp;Postgres 的读动作不会锁定数据Q不事务是何隔ȝ别,一个事务读取的数据可能被另一个事务覆盖。换句话_如果一?nbsp;SELECT q回了一行,qƈ不意味着在返回该行时该行q存在(比如说在语句完成或事务开始后的某Ӟ也不意味着在当前事务做提交或者回卷前该行被保护不被ƈ行的事务删除或更新?nbsp;
要保证一行的实际存在和避免其被ƈ行更斎ͼ我们必须使用 SELECT FOR UPDATE 或者合适的 LOCK TABLE 语句。当从其他环境向 Postgres 里用可串行化模式UL应用时一定要把这些问题考虑q去?nbsp;

注意Q?nbsp;在版?nbsp;6.5 前,Postgres 使用d作锁Q因而当从以前的 Postgres 版本?.5Q或更高版本Q升U时也要考虑q些问题?br />
Postgres 隔离U别


]]>
վ֩ģ壺
|
Ů|
|
ƽ|
|
|
|
ͼ|
봨|
|
|
|
|
|
|
ˮ|
|
±|
|
ɽ|
Ͽ|
|
|
|
|
|
˳|
|
䰲|
|
|
|
|
ڽ|
Ʊ|
|
|
ʻ|
|
˼|
Ǹ|