﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-黑夜里的狼-随笔分类-other</title><link>http://www.blogjava.net/hellxoul/category/54004.html</link><description /><language>zh-cn</language><lastBuildDate>Sun, 10 Nov 2013 04:04:34 GMT</lastBuildDate><pubDate>Sun, 10 Nov 2013 04:04:34 GMT</pubDate><ttl>60</ttl><item><title>TDDL动态数据源基本说明</title><link>http://www.blogjava.net/hellxoul/archive/2013/11/10/406177.html</link><dc:creator>hellxoul</dc:creator><author>hellxoul</author><pubDate>Sun, 10 Nov 2013 03:13:00 GMT</pubDate><guid>http://www.blogjava.net/hellxoul/archive/2013/11/10/406177.html</guid><wfw:comment>http://www.blogjava.net/hellxoul/comments/406177.html</wfw:comment><comments>http://www.blogjava.net/hellxoul/archive/2013/11/10/406177.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hellxoul/comments/commentRss/406177.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hellxoul/services/trackbacks/406177.html</trackback:ping><description><![CDATA[<h2>TDDL动态数据源基本说明</h2><h2>总体描述</h2><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">TDDL动态数据源主要分为2层,每一层都实现了<strong style="word-wrap: break-word;">jdbc</strong><strong style="word-wrap: break-word;">规范</strong>,以方便地集成到各种orm框架或者直接使用.每一层都各司其职.</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><img height="354" alt="" src="http://blog.chinaunix.net/attachment/201308/26/29126521_13775260624zsS.jpg" width="421" style="word-wrap: break-word; border: 0px;" /><a href="http://rdc.taobao.com/team/jm/files/2012/04/ffff.jpg" style="word-wrap: break-word; text-decoration: none; color: #19599b;"></a>&nbsp;</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">整体结构如上图,<strong style="word-wrap: break-word;">TGroupDataSource(tddl group ds)</strong>默认情况下依赖<strong style="word-wrap: break-word;">TAtomDataSource(tddl atom ds)</strong>,但是可以扩展依赖普通数据源.这一层主要的职责是解决读写分离以及主备切换的问题,当然是在线执行这些动作,无需重启.一个TGroupDataSource底下会挂多个TAtomDataSource,每个TAtomDataSource都有相对应的读写权重.</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><strong style="word-wrap: break-word;">TAtomDataSource(tddl atom ds)</strong>这一层并没有实现真正的数据源逻辑,而是依赖了一个近似第三方的包-我们<strong style="word-wrap: break-word;">从</strong><strong style="word-wrap: break-word;">jboss</strong><strong style="word-wrap: break-word;">剥离出来的datasource</strong>,这一层的职责主要是将单个数据源的配置放置到diamond服务器中,实现数据源配置的集中管理和动态变更.减少运维成本.<strong style="word-wrap: break-word;">&nbsp;</strong>TAtomDataSource实际对应了一个真正的数据源.</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">Tddl动态数据源暂时支持mysql和oracle ,但是因为每一层都是jdbc的实现,所以很容易扩展支持其他实现jdbc规范的数据源.</p><h2>TGroupDataSource</h2><ol style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><li style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: decimal outside;">基本功能</li></ol><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">(1)&nbsp;&nbsp;&nbsp;&nbsp; 主备数据库动态容灾切换</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">支持进行主备的对调切换，状态对调后备库变为主库，主库变为备库</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">(2)&nbsp;&nbsp;&nbsp;&nbsp; 相同数据分片读写分离</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">针对mysql replication机制进行的数据主备复制，可以直接使用group datasource来支持读写分离。读写分离支持权重设置，允许对不同库使用不同的权重。</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">(3)&nbsp;&nbsp;&nbsp;&nbsp; 读重试</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">一台数据库挂掉后，如果是个fatal exception(有定义)，那么会进入读重试，以确保尽可能多的数据访问可以在正常数据库中访问。</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">(4)&nbsp;&nbsp;&nbsp;&nbsp; 数据库挂掉排除,单线程重试</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">使用try &#8211; lock机制来进行线程保护，在第一次捕捉到fatal exception以后，只允许一个线程进入数据库进行数据访问，直到数据库可以正常的工作为止</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">(5)&nbsp;&nbsp;&nbsp;&nbsp; 流量控制,数据库保护</p><ol style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><li style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: decimal outside;">延展性功能</li></ol><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">(1)&nbsp;&nbsp;&nbsp;&nbsp; 指定数据库访问(ThreadLocal)</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">一组对等数据库中,写库一般只配置一个,其余数据库都为备库,因为通过复制机制,所以主备主键有延迟,对于各种类型的读(实时读和延迟读),可以使用GroupDataSourceRouteHelper.executeByGroupDataSourceIndex(int dataSourceIndex)指定需要访问的数据库.</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">(2)&nbsp;&nbsp;&nbsp;&nbsp; 指定数据库访问(Hint)</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">这是指定数据库访问的另外一种方式. 这种方式是在sql之前加注释,告知tddl动态数据源该选择第几个数据库.类似: /*+TDDL_GROUP({groupIndex:0})*/select * from normaltbl_0001 where pk = ? 变幻groupIndex的数字即可指定具体的第几个库,从0开始.</p><h2>TAtomDataSource</h2><ol style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><li style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: decimal outside;">基本功能</li></ol><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">(1)&nbsp;&nbsp;&nbsp;&nbsp; 数据源配置集中管控</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">(2)&nbsp;&nbsp;&nbsp;&nbsp; 定期密码变更</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">(3)&nbsp;&nbsp;&nbsp;&nbsp; Jboss数据源连接池的配置管理和推送</p><ol style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><li style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: decimal outside;">延展性功能</li></ol><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">(1)&nbsp; 动态创建，添加，减少数据源</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">(2)&nbsp; 数据库R,W,NA状态通知，以及读写访问控制，如置为NA则数据库所有访问会直接抛出SQLException</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">(3)&nbsp; 数据库保护</p><h2>Diamond中配置说明.</h2><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">Tddl的动态数据源配置都放置在diamond配置中心,而一条diamond配置包括一个全局唯一的dataId和GROUP, tddl的配置数据也不例外,以下主要说明tddl动态数据源的dataId拼写以及每一个dataId下数据的内容.<strong style="word-wrap: break-word;">(</strong><strong style="word-wrap: break-word;">详细示例请参考示例使用说明文档)</strong></p><ol style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><li style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: decimal outside;"><strong style="word-wrap: break-word;">1.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong><strong style="word-wrap: break-word;">TGroupDataSource</strong><strong style="word-wrap: break-word;">的配置</strong></li></ol><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">Group中的配置主要是配置一组对等的数据的读写权重</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">dataId组成规范:<strong style="word-wrap: break-word;">&#8220;com.taobao.tddl.jdbc.group_V2.4.1_&#8221;+dbGroupKey</strong></p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">配置内容(示例):<strong style="word-wrap: break-word;">tddl_sample_0:r10w10p0,tddl_sample_0_bac:r10w0p0</strong></p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">其中tddl_sample_0和tddl_sample_0_bak就是下一层需要的dbKey,后面r为读权重，w为写权重</p><ol style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: none; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><li style="word-wrap: break-word; margin: 0px; padding: 0px; list-style: decimal outside;"><strong style="word-wrap: break-word;">2.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</strong><strong style="word-wrap: break-word;">TAtomDataSource</strong><strong style="word-wrap: break-word;">的配置</strong></li></ol><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">atom ds中的配置分为了3部分（global,app,user）,配置内容全部为java的properties格式</p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><strong style="word-wrap: break-word;">Global</strong></p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">dataId组成规范:&nbsp;<strong style="word-wrap: break-word;">&#8220;com.taobao.tddl.atom.global.&#8221;+dbKey</strong></p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">配置内容：</p><table cellspacing="0" cellpadding="0" border="1" style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><tbody style="word-wrap: break-word;"><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">属性key</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">说明</td></tr><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">ip</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">数据实例的ip</td></tr><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">port</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">数据实例的端口</td></tr><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">dbname</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">数据库名称</td></tr><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">dbType</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">MYSQL,ORACLE</td></tr><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">dbStatus</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">RW,NA</td></tr></tbody></table><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><strong style="word-wrap: break-word;">App</strong></p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">dataId组成规范:<strong style="word-wrap: break-word;">&nbsp;&#8220;com.taobao.tddl.atom.app.&#8221;+appName+&#8221;.&#8221;+dbKey</strong></p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">配置内容：</p><table cellspacing="0" cellpadding="0" border="1" style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><tbody style="word-wrap: break-word;"><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">属性key</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">说明</td></tr><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">username</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">该应用使用的用户名</td></tr><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">oracleConType</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">oci,thin,如果db为mysql,则不用理会</td></tr><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">minPoolSize</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">最小连接池</td></tr><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">maxPoolSize</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">最大连接池</td></tr><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">idleTimeout</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">连接的最大空闲时间</td></tr><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">blockingTimeout</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">等待连接的最大时间</td></tr><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">preparedStatementCacheSize</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">Oracle专用</td></tr><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">writeRestrictTimes</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">单位timeSliceInMillis写限制，默认空不限制</td></tr><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">readRestrictTimes</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">单位timeSliceInMillis读限制，默认空不限制</td></tr><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">threadCountRestrict</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">并发线程限制，默认空不限制</td></tr><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">timeSliceInMillis</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">限制的时间单位</td></tr><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">connectionProperties</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">连接参数</td></tr></tbody></table><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><strong style="word-wrap: break-word;">User</strong></p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">dataId组成规范:<strong style="word-wrap: break-word;">&nbsp;&#8220;com.taobao.tddl.atom.passwd.&#8221;+dbName+&#8221;.&#8221;+dbType+&#8221;.&#8221;+userName</strong></p><p style="word-wrap: break-word; margin-right: 0px; margin-left: 0px; padding: 0px; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;">配置内容：</p><table cellspacing="0" cellpadding="0" border="1" style="word-wrap: break-word; color: #666666; font-family: 宋体, Arial; font-size: 12px; line-height: 26px; background-color: #ffffff;"><tbody style="word-wrap: break-word;"><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">属性key</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">说明</td></tr><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">encPasswd</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">密码</td></tr><tr style="word-wrap: break-word;"><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">encKey</td><td valign="top" width="284" style="word-wrap: break-word; margin: 0px; padding: 0px;">密钥</td></tr></tbody></table><img src ="http://www.blogjava.net/hellxoul/aggbug/406177.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hellxoul/" target="_blank">hellxoul</a> 2013-11-10 11:13 <a href="http://www.blogjava.net/hellxoul/archive/2013/11/10/406177.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Facebook 正式开源其大数据查询引擎 Presto</title><link>http://www.blogjava.net/hellxoul/archive/2013/11/07/406116.html</link><dc:creator>hellxoul</dc:creator><author>hellxoul</author><pubDate>Thu, 07 Nov 2013 15:15:00 GMT</pubDate><guid>http://www.blogjava.net/hellxoul/archive/2013/11/07/406116.html</guid><wfw:comment>http://www.blogjava.net/hellxoul/comments/406116.html</wfw:comment><comments>http://www.blogjava.net/hellxoul/archive/2013/11/07/406116.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/hellxoul/comments/commentRss/406116.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/hellxoul/services/trackbacks/406116.html</trackback:ping><description><![CDATA[<p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">Facebook 正式宣布开源 Presto &#8212;&#8212; 数据查询引擎，可对250PB以上的数据进行快速地交互式分析。该项目始于 2012 年秋季开始开发，目前该项目已经在超过 1000 名 Facebook 雇员中使用，运行超过 30000 个查询，每日数据在 1PB 级别。Facebook 称 Presto 的性能比诸如 Hive 和 Map*Reduce 要好上 10 倍有多。</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">Presto 当前支持 ANSI SQL 的大多数特效，包括联合查询、左右联接、子查询以及一些聚合和计算函数；支持近似截然不同的计数(DISTINCT COUNT)等。</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;"><img alt="" src="http://s4.51cto.com/wyfs01/M01/32/48/wKioJlJ6_pGxIQAwAABvHl0gO9w448.jpg" width="498" style="border: 0px;" /></p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;"><img alt="" src="http://s2.51cto.com/wyfs01/M00/32/4A/wKioOVJ6_pHghh2gAABUA39yPCg813.jpg" width="498" style="border: 0px;" /></p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">你可以通过下面地址了解该项目详情和获取代码：</p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;"></p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;"><a href="http://prestodb.io/" style="color: #004276;">Documentation</a>&nbsp;|&nbsp;<a href="https://github.com/facebook/presto" style="color: #004276;">Code</a></p><p style="margin: 10px 0px; padding: 0px; color: #333333; background-color: #f8f8f8; text-indent: 28px; font-family: 宋体; line-height: 28px;">原文链接：<a href="http://www.oschina.net/news/45706/facebook-open-sources-presto-homegrown-sql-query-engine" style="color: #004276;">http://www.oschina.net/news/45706/facebook-open-sources-presto-homegrown-sql-query-engine</a></p><img src ="http://www.blogjava.net/hellxoul/aggbug/406116.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/hellxoul/" target="_blank">hellxoul</a> 2013-11-07 23:15 <a href="http://www.blogjava.net/hellxoul/archive/2013/11/07/406116.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>