??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
1.Enterprise(企业?,
2.Development(开发版),
3.Workgroup,(工作版)
4.Standard,(标准?
5.Express.
单的比较一?Enterprise, Development ?Express {三个版?以功能言QEnterprise 版和 Development 版的功能一模一栗两者的差别Q除了授权不同外Q最主要的差别是:
Enterprise版的数据库引擎只能安装在Win2003Server(或其他Server)?nbsp;
如果你想安装在WindowsXP Propȝ上,你应该安装SQL2005Development?开发版)?nbsp;
什么是「数据库引擎」。数据库引擎是SQL2005的核心,是最主要的数据库理功能模块。没有它Q就不是数据库管理系l了?/p>
因此Q如果你是初学者,如果你只是想要在安学习学习Q如果你的环境是 WindowsXP ProQ那么,你应该选择的是 SQL2005Development(开发版)Q而不是SQL2005Enterprise(企业?或SQL2005Express(易版)?br />
Enterprise Edition 辑ֈ了支持超大型企业q行联机事务处理 (OLTP)、高度复杂的数据分析、数据仓库系l和|站所需的性能水^。Enterprise Edition 的全面商业智能和分析能力及其高可用性功能(如故障{Uȝ集)Q它可以处理大多数关键业务的企业工作负荗Enterprise Edition 是最全面?SQL Server 版本Q是大型企业的理想选择Q能够满x复杂的要求?/p>
SQL Server 2005 q推Z适用?32 位或 64 位^台的 180 ?Evaluation Edition。SQL Server Evaluation Edition 支持?SQL Server 2005 Enterprise Edition 相同的功能集。可以根据生产需要升U?SQL Server Evaluation Edition?/p>
SQL Server 2005 Standard Edition 是适合中小型企业的数据理和分析^台。它包括电子商务、数据仓库和业务解x案所需的基本功能。Standard Edition 的集成商业智能和高可用性功能可以ؓ企业提供支持其运营所需的基本功能。SQL Server 2005 Standard Edition 是需要全面的数据理和分析^台的中小型企业的理想选择?/p>
对于那些需要在大小和用h量上没有限制的数据库的小型企业,SQL Server 2005 Workgroup Edition 是理想的数据理解决Ҏ。SQL Server 2005 Workgroup Edition 可以用作前端 Web 服务器,也可以用于部门或分支机构的运营。它包括 SQL Server 产品pd的核心数据库功能Qƈ且可以轻村֜升?SQL Server 2005 Standard Edition ?SQL Server 2005 Enterprise Edition。SQL Server 2005 Workgroup Edition 是理想的入门U数据库Q具有可靠、功能强大且易于理的特炏V?/p>
SQL Server 2005 Developer Edition 允许开发h员在 SQL Server 剙生成Mcd的应用程序。该应用E序包括 SQL Server 2005 Enterprise Edition 的所有功能,但许可用作开发和试pȝQ而不用作生服务器。SQL Server 2005 Developer Edition 是独立Y件供应商 (ISV)、咨询h员、系l集成商、解x案供应商以及生成和测试应用程序的企业开发h员的理想选择。可以根据生产需要升U?SQL Server 2005 Developer Edition?/p>
SQL Server Express 数据库^台基?Microsoft SQL Server 2005。它也可以替?Microsoft Desktop Engine (MSDE)。通过?Microsoft Visual Studio 2005 集成QSQL Server Express 化了功能丰富、存储安全且部v快速的数据驱动应用E序的开发过E?/p>
SQL Server Express 是免费的Q可以再分发Q受制于协议Q,q可以充当客L数据库以及基本服务器数据库。SQL Server Express 是独立Y件供应商 ISV、服务器用户、非专业开发h员、Web 应用E序开发h员、网站主机和创徏客户端应用程序的~程爱好者的理想选择。如果需要更多的高数据库功能,可将 SQL Server Express 无缝升到更复杂?SQL Server 版本?/p>
SQL Server Express q提供了一些附加组Ӟq些lg都作为具有高U服务的 Microsoft SQL Server 2005 Express Edition (SQL Server Express) 的一部分提供。除?SQL Server Express 的功能外Q具有高U服务的 SQL Server Express q包括以下功能:
SQL Server Mobile 是简版数据库Q将企业数据理功能扩展到小型设备上。SQL Server Mobile 能够复制 Microsoft SQL Server 2005 ?Microsoft SQL Server 2000 的数据,q且允许用户l护与主数据库同步的Ud数据存储。SQL Server Mobile 是唯一为智能设备提供关pL据库理功能?SQL Server 版本?/p>
SQL Server 2005 Runtime Edition ?Microsoft ISV Royalty Program 提供。根?SQL Server 2005 Runtime Edition 的最l用戯可协议,如果用户不?SQL Server 代码q行M其他应用E序或者在M其他上下文中使用 SQL Server 代码Q独立Y件供应商 (ISV) 可能?SQL Server 代码嵌入C们提供的解决Ҏ中。关?SQL Server Runtime Edition 的详l信息,请参?Microsoft 知识库中的文?a onclick="javascript:Track('ctl00_LibFrame_ctl02|ctl00_LibFrame_ctl03',this);" >如何获取 SQL Server Runtime 许可?/a> (http://support.microsoft.com/kb/917400)?br />
注意点:
在XP上不能安?Enterprise 版本Q?br />
Express版本只能在本地访问,不能q行q程讉K?br />
Express版本q接旉要在q接字符串中?***\SQLExpress
Developer版本可以q行q程讉KQ记住要启用TCP/IPq接Q同时要讄好防火墙
数据仓库环境
1.ETLQ数据抽取、{化和载入
2.OLAPQOnLine Analytical Processing Engine
3.DSSQ决{支持系l?br>4.客户分析与报表工?/font>
5.其他数据攉和数据输出工?/font>
数据仓库的构?/font> 有关ETL 其他 数据仓库不一定要用数据库来实?/p>
数据仓库不满第三范式,q且不满式,他只含有“键(keyQ?#8221;。(W一范式Q有主键Q主观上形象的看Q是W合常理的分cLl织Q第二范式:满W一范式Qƈ且所有除主键之外的列都与所有的主键有关p;W三范式Q满第二范式,q且所有除主键之外的列怺之间没有关系Q?/p>
数据仓库大体可以分ؓ四个层次Q?br>数据源、数据管理与存储层、OLAP服务器和前端工具?br>1.数据?/font>Q他是数据仓库的基础Q位于数据仓库构架的最底层Q是数据仓库的数据源泉。包括各个业务处理子pȝ的信息?br>2.数据理与存储层Q是数据仓库的核心。数据仓库如何高效管理数据是区别与面向操作数据库的主要标准。完成按照主题管理数据,聚合数据存放于多l数据库中?br>3.OLAP服务?/font>Q对数据q行有效集成Q按多维模型予以l织?br>4.前端工具Q主要包括各U报表工兗查询工兗数据挖掘工L?/p>
数据q入数据仓库的过E一般都要经q抽取(extractedQ、{化(transformedQ和载入QloadedQ三个过E,q个q程被简UCؓETL。一般用现有工h实现ETL的过E?br>1.E:数据抽取?/font>在数据抽取的同时Q数据不能被修改。可以抽取的文g格式为:数据库对象,比如表可以整个地从源pȝ中导出。比如,MS SQL Server 2000的bcp "select * from Northwind..customers" queryout "D:temp.txt"? -c -p -U"sa" -P"sa"。抽取过Eؓ动态抽取,即目标有变化才抽取,不做无谓的工作而媄响效率。一U实现的办法是加时间戳Q另一U方法就是分别在不同的表中进行描q?br>2.T:数据转化?/font>卛_数据从一个系l{Ud另外一个系l中。顺序ؓQ源pȝ -> staging database -> 数据仓库 -> data mart。有三种方式Qa.flat files(无范? b.区分操作 c.使用交换分区?br>3.L:数据输入
q个语句用来声明一个时表,表明为temp1, 位于现有的表I间mytempspace?q个表空间必d?, 和employee表结构一模一? 每当处理commit语句?临时表的行就会被保存下来(不会被删?, 最后对临时表的修改不用记入日志.
3、ALter语句可以用来改变数据库中的一些特? 比如[~冲?Buffer pool), 模式(Schema), ?Table), 表空?Table Space), 触发?Trigger), 视图(View)], 注意: 不能修改索引, 如果想修改烦? 必须删除该烦引后重新d、例? alter table t_ci_yclsqjhzb add column fd_sxygbh CHARACTER(20); Z改表t_ci_yclsqjhzb, d一个字Dfd_sxygbh。修改字D属性:alter table t_ci_yclsqjhzb alter column fd_sxygbh set datatype CHARACTER(50);
4、Drop语句用来删除一些数据库特征, 比如包括[~冲?Buffer pool), 事g监视?Event monitor), 函数(Function), 索引(Index), 模式(Schema), 存储q程(Stored procedure), ?Table), 表空?Table space), 触发?Trigger), 视图(View)], 单的例子 drop table temp, 是删除表temp.
二、数据库操作语言(DML)
1、用Select, 用于索表或者视图中的数据、例?select * from temp;
2、用Insert, 向表或者视图中d一条数? 例子 Insert into temp (字段1, 字段2, 字段3) values (?, ?, ?);
3、用update, 修改表数据或者视图中数据、例?: update temp set 字段1=?, 字段2=? 例子2: update temp set(字段1,字段2)=(?,?);
4、用delete, 删除表数据或者视图中的数据、例?delete from temp
5、表中数据非常多的时候,500万条以上Q需要用表分区来提高效率?/p>
三、SQL工具
1、内q接
2、外q接(左连? 双? 全连?.内连接时Q返回查询结果集合中之仅是符合查询条? WHERE 搜烦条g?HAVING 条g)和连接条件之行。而采用外q接Ӟ它返回到查询l果集合中之不仅包含W合q接条g之行Q而且q包括左?左外q接?、右?叛_q接?或两个边接表(全外q接)中之所有数据行?
3、就DB2而言, q接查询的效率要比子查询要高.
4、Having和where的区? 只有使用了group by的语句才能用having.
5、Case语句在sql 中的应用,例如: select 字段1, 字段2 CASR type when 'T' then 'TABLE' when 'V' then 'VIEW' else 'OTHERS' END from temp,相当? select 字段1,字段2,table from temp where type = 'T' union all select 字段1,字段2,view from temp where type = 'V';
6、合q查询Union.
四、SQL函数
1、列函数
1.1 AVG函数, q_值的函数.
1.2 COUNT函数, 计算表中某列的行?
1.3 MAX函数, MIN函数,
1.4 STDDEV函数, q回一l数的标准方? stddev函数的参数可以是M数字型数据类? q回l果是双_ֺ点?
1.5 SUM函数, 求和
1.6 VARIANCE,q回一l数据的方差, VARIANCE函数的参数可以是M数字型数据类? q回l果是双_ֺ点?
2、标量函?br> 2.1 ABS l对? HEXq回值的十六q制表示.
2.2 LENGTHq回参数中的字节数长?
2.3 YEAR抽取参数中的q䆾.
五、DB2 UDB囑Ş用户界面
1、配|助? 指o: db2ca, 使用配置助手来配|和l护要使用的数据库对象, 必须在db2上配|了要存储的数据库后才能用这些数据库.
2、控制中? 指o: db2cc, 用户可以在对象窗格或者内容窗g选中要操作的对象, 然后右键弹出快捷菜单, 然后通过快捷菜单的命? 对该对象q行相应的操?
3、命令编辑器, 指o: db2ce, 用户可以在命令编辑器中输入指令或者调用现成的命o脚本, 然后查看执行后的l果.
4、命令窗? 指o: db2cmd, 用户可以在窗口中输入命o或调用现成的命o脚本, 然后执行, q查看结?
5、信息中? 指o: db2ic, db2提供了丰富的信息, 几乎所有的信息都可以通过信息中心来获?
6、开发中? 指o: db2dc, 开发中心可以完成多UQ? 如创建项? d数据库连? 创徏存储q程, 创徏UDF{基本Q? 也可以完成更改环境设|?
7、健康中? 指o: db2hc.
8、Q务中? 指o: db2tc, 可以创徏一些命令脚?
9、复制中? 指o: db2rc,
六、DB2安全控制
1、验证,数据库安全性中最基本的概念之一是验证Q这是一个相当简单的q程Q系l通过q个q程来证实用戯n份。用户可以通过提供w䆾证明或验证o。来响应验证h?br>2、验证选项Qdbm cfg authentication 参数的许多设|在逻辑上可以分lؓ以下四个不同cdQserverQ服务器Q、clientQ客hQ、dce、kerberos?br>3、serverQ服务器Q缺省安全性机Ӟ指明验证应该使用服务器的操作pȝ在服务器上发生。如果用h识和密码是在q接期间指定的,那么 db2 调用操作系l函数来验证提交的用h识和密码。(在基?windows 的环境中Q用h识常被称为用户名。用户名和密码合h常被UCؓ用户账户。)
4、clientQ客hQ验证。该l仅有的选项 client 指明验证在客户Z发生。如果客hȝ在原本就h安全Ҏ的操作pȝQ例如,aixQ上Q那么它是可信dh。通常Q除 microsoft windows 95 ?98 被认Z可信M外,所有客h都是可信ȝ?
七、DB2备䆾恢复操作
1、整个备份,在控制中心,直接备䆾Q这个备份包括表l构Q描q、注释、数据库函数、触发器、存储过E?..Q,恢复的时候也直接在控制中心点恢复库就可以了,q里要注意恢复的路径目录Q日期等?br>2、db2moveҎQ一般只用来备䆾表数据,如果没有表结构也会同时新Q但是没有其他例如注释、触发器{等的恢复。备份的例子Qdb2move cjdbgq[tablename] export -u bscj[user] -p baosight[password]Q这里也能备份单表。恢复的例子Qdb2move cjdbgq[tablename] import-u bscj[user] -p baosight[password]Q这里需要注意操作的目录Q应选择为Dosq入目录?br>3、单表数据导出、导入,导出例子Qexport to c:\test\test.ixf of ixf select * from testQ导入数据:import from c:\test\test.ixf of ixf insert into bscj.T_CI_ALERMQ这里的import是添加的方式Q所以在操作前需要delete from bscj.T_CI_ALERMQ把已有数据清除?br>
hibernate的session提供了一U缓存,每个sessionQ对同一个idq行两次loadQ不会发送两条sqll数据库Q但是session关闭的时候,一U缓存就失效了?/p>
二~存是SessionFactoryU别的全局~存Q它底下可以使用不同的缓存类库,比如ehcache、oscache{,需要设|hibernate.cache.provider_classQ我们这里用ehcacheQ在2.1中就?
hibernate.cache.provider_class=net.sf.hibernate.cache.EhCacheProvider
如果使用查询~存Q加?
hibernate.cache.use_query_cache=true
~存可以单的看成一个MapQ通过key在缓存里面找?/p>
Class的缓?/strong>
对于一条记录,也就是一个PO来说Q是ҎID来找的,~存的key是IDQ是POJO。无论listQloadq是iterateQ只要读Z个对象,都会填充~存。但是list不会使用~存Q而iterate会先取数据库select id出来Q然后一个id一个id的loadQ如果在~存里面有,׃~存取,没有的话去数据库load。假设是d~存Q需要设|:
如果你用的二~存实现是ehcache的话Q需要配|ehcache.xml
其中eternal表示~存是不是永q不时QtimeToLiveSeconds是缓存中每个元素Q这里也是一个POJOQ的时旉Q如果eternal="false"Q超q指定的旉Q这个元素就被移C。timeToIdleSeconds是发呆时_是可选的。当往~存里面put的元素超q?00个时Q如果overflowToDisk="true"Q就会把~存中的部分数据保存在硬盘上的时文仉面?
每个需要缓存的class都要q样配置。如果你没有配置Qhibernate会在启动的时候警告你Q然后用defaultCache的配|,q样多个class会共享一个配|?
当某个ID通过hibernate修改Ӟhibernate会知道,于是U除~存?
q样大家可能会想Q同L查询条gQ第一ơ先listQ第二次再iterateQ就可以使用到缓存了。实际上q是很难的,因ؓ你无法判断什么时候是W一ơ,而且每次查询的条仉常是不一LQ假如数据库里面?00条记录,id??00Q第一ơlist的时候出了前50个idQ第二次iterate的时候却查询?0?0号idQ那?0-50是从~存里面取的Q?1?0是从数据库取的,共发?+20条sql。所以我一直认为iterate没有什么用QL会有1+N的问题?
Q题外话Q有说法说大型查询用list会把整个l果集装入内存,很慢Q而iterate只select id比较好,但是大型查询L要分|的,谁也不会真的把整个结果集装进来,假如一?0条的话,iterate共需要执?1条语句,list虽然选择若干字段Q比iterateW一条select id语句慢一些,但只有一条语句,不装入整个结果集hibernateq会Ҏ数据库方a做优化,比如使用mysql的limitQ整体看来应该还是list快。)
如果惌对list或者iterate查询的结果缓存,p用到查询~存?/p>
查询~存
首先需要配|hibernate.cache.use_query_cache=true
如果用ehcacheQ配|ehcache.xmlQ注意hibernate3.0以后不是net.sf的包名了
然后
query.setCacheable(true);//ȀzL询缓?
query.setCacheRegion("myCacheRegion");//指定要用的cacheRegionQ可?
W二行指定要使用的cacheRegion是myCacheRegionQ即你可以给每个查询~存做一个单独的配置Q用setCacheRegion来做q个指定Q需要在ehcache.xml里面配置它:
如果省略W二行,不设|cacheRegion的话Q那么会使用上面提到的标准查询缓存的配置Q也是net.sf.hibernate.cache.StandardQueryCache
对于查询~存来说Q缓存的key是根据hql生成的sqlQ再加上参数Q分늭信息Q可以通过日志输出看到Q不q它的输Z是很可读Q最好改一下它的代码)?
比如hqlQ?
from Cat c where c.name like ?
生成大致如下的sqlQ?
select * from cat c where c.name like ?
参数?tiger%"Q那么查询缓存的key*大约*是这L字符Ԍ我是凭记忆写的,q不_Q不q看了也该明白了Q:
select * from cat c where c.name like ? , parameter:tiger%
q样Q保证了同样的查询、同L参数{条件下h一Lkey?
现在说说~存的,如果是list方式的话Q在q里q不是整个结果集Q而是查询出来的这一串ID。也是_不管是listҎq是iterateҎQ第一ơ查询的时候,它们的查询方式很它们qx的方式是一LQlist执行一条sqlQiterate执行1+N条,多出来的行ؓ是它们填充了~存。但是到同样条gW二ơ查询的时候,都和iterate的行Z样了Q根据缓存的keyȝ存里面查CQ是一串idQ然后在到class的缓存里面去一个一个的load出来。这样做是ؓ了节U内存?
可以看出来,查询~存需要打开相关cȝclass~存。list和iterateҎW一ơ执行的时候,都是既填充查询缓存又填充class~存的?
q里q有一个很Ҏ被忽视的重要问题Q即打开查询~存以后Q即使是listҎ也可能遇?+N的问题!相同条gW一ơlist的时候,因ؓ查询~存中找不到Q不class~存是否存在数据QL发送一条sql语句到数据库获取全部数据Q然后填充查询缓存和class~存。但是第二次执行的时候,问题来了,如果你的class~存的超时时间比较短Q现在class~存都超时了Q但是查询缓存还在,那么listҎ在获取id串以后,会一个一个去数据库loadQ因此,class~存的超时时间一定不能短于查询缓存设|的时旉Q如果还讄了发呆时间的话,保证class~存的发呆时间也大于查询的缓存的生存旉。这里还有其他情况,比如class~存被程序强制evict了,q种情况p自己注意了?/p>
另外Q如果hql查询包含select字句Q那么查询缓存里面的是整个l果集了?/p>
当hibernate更新数据库的时候,它怎么知道更新哪些查询~存呢?
hibernate在一个地方维护每个表的最后更新时_其实也就是放在上面net.sf.hibernate.cache.UpdateTimestampsCache所指定的缓存配|里面?
当通过hibernate更新的时候,hibernate会知道这ơ更新媄响了哪些表。然后它更新q些表的最后更新时间。每个缓存都有一个生成时间和q个~存所查询的表Q当hibernate查询一个缓存是否存在的时候,如果~存存在Q它q要取出~存的生成时间和q个~存所查询的表Q然后去查找q些表的最后更新时_如果有一个表在生成时间后更新q了Q那么这个缓存是无效的?
可以看出Q只要更新过一个表Q那么凡是涉及到q个表的查询~存失效了Q因此查询缓存的命中率可能会比较低?/p>
Collection~存
需要在hbm的collection里面讄
假如class是CatQcollection叫childrenQ那么ehcache里面配置
Collection的缓存和前面查询~存的list一P也是只保持一串idQ但它不会因个表更新q就失效Q一个collection~存仅在q个collection里面的元素有增删时才失效?
q样有一个问题,如果你的collection是根据某个字D|序的Q当其中一个元素更C该字D|Q导致顺序改变时Qcollection~存里面的顺序没有做更新?/p>
~存{略
只读~存Qread-onlyQ:没有什么好说的
?写缓存(read-writeQ?E序可能要的更新数据
不严格的?写缓存(nonstrict-read-writeQ:需要更新数据,但是两个事务更新同一条记录的可能性很,性能比读写缓存好
事务~存QtransactionalQ:~存支持事务Q发生异常的时候,~存也能够回滚,只支持jta环境Q这个我没有怎么研究q?/p>
d~存和不严格d~存在实C的区别在于,d~存更新~存的时候会把缓存里面的数据换成一个锁Q其他事务如果去取相应的~存数据Q发现被锁住了,然后q接取数据库查询?
在hibernate2.1的ehcache实现中,如果锁住部分~存的事务发生了异常Q那么缓存会一直被锁住Q直?0U后时?
不严D写缓存不锁定~存中的数据?/p>
使用二~存的前|条?/strong>
你的hibernateE序Ҏ据库有独占的写访问权Q其他的q程更新了数据库Qhibernate是不可能知道的。你操作数据库必需直接通过hibernateQ如果你调用存储q程Q或者自׃用jdbc更新数据库,hibernate也是不知道的。hibernate3.0的大扚w更新和删除是不更CU缓存的Q但是据?.1已经解决了这个问题?
q个限制相当的棘手,有时候hibernate做批量更新、删除很慢,但是你却不能自己写jdbc来优化,很郁闷吧?
SessionFactory也提供了U除~存的方法,你一定要自己写一些JDBC的话Q可以调用这些方法移除缓存,q些Ҏ是:
不过我不q样做,因ؓq样很难l护。比如你现在用JDBC扚w更新了某个表Q有3个查询缓存会用到q个表,用evictQueries(String cacheRegion)U除?个查询缓存,然后用evict(Class persistentClass)U除了class~存Q看上去好像完整了。不q哪天你d了一个相x询缓存,可能会忘记更新这里的U除代码。如果你的jdbc代码到处都是Q在你添加一个查询缓存的时候,q知道其他什么地方也要做相应的改动吗Q?/p>
----------------------------------------------------
ȝQ?/strong>
不要惛_然的以ؓ~存一定能提高性能Q仅仅在你能够驾驭它q且条g合适的情况下才是这L。hibernate的二U缓存限制还是比较多的,不方便用jdbc可能会大大的降低更新性能。在不了解原理的情况下ؕ用,可能会有1+N的问题。不当的使用q可能导致读数据?
如果受不了hibernate的诸多限Ӟ那么q是自己在应用程序的层面上做~存吧?
在越高的层面上做~存Q效果就会越好。就好像管盘有缓存,数据库还是要实现自己的缓存,管数据库有~存Q咱们的应用E序q是要做~存。因为底层的~存它ƈ不知道高层要用这些数据干什么,只能做的比较通用Q而高层可以有针对性的实现~存Q所以在更高的别上做缓存,效果也要好些吧?/p>
]]>