Amoeba for Mysql 1.3.1-BETA发布
Amoeba for Mysql 1.3.1-BETA 版本发布:
Bug Fix:
1、主要解决 1.3.0 -BETA 版本的amoeba进程的native memory(非JVM heap)使用逐步增长(内存增加速度取决于请求量),并且最终会导致amoeba本身无法响应、或者崩溃
请大家停止使用1.3.0-BETA版本
Amoeba for Mysql 1.3.1-BETA 版本发布:
Bug Fix:
1、主要解决 1.3.0 -BETA 版本的amoeba进程的native memory(非JVM heap)使用逐步增长(内存增加速度取决于请求量),并且最终会导致amoeba本身无法响应、或者崩溃
请大家停止使用1.3.0-BETA版本
Amoeba for mysql 1.3.0-BETA发布:
1、解决部分sql 解析问题
2、解决刚刚创建的mysql连接偶尔出现timeout的情况
3、兼容部分客户端启用压缩协议无法连接到amoeba的情况
———新BUG————————
1、使用native memory溢出
2010-05-01 amoeba-mysql-1.2.0-RC3
1、修复了select last_insert_id() 返回id过大以后,客户端无法获得的问题
2、支持PHP的PDO,个人不是PHP程序员,希望有更多使用PDO的开发人员反馈
3、增强了amoeba与mysql的连接池心跳检测机制(修复HA机制的支持)
4、另外提醒使用amoeba的同仁,建议采用prepared statement来访问amoeba,这样amoeba就不需要重复解析sql语句。会节约不少的资源
5、amoeba的日志输出,默认级别是info甚至更高。需要看到更详细的日志信息,请修改amoeba下面的conf/log4j.xml
6、稳定性增强
7 、修正错别字(isReadStatment –> isReadStatement )
8 、修正insert语句中包含 ON DUPLICATE KEY UPDATE 关键字而无法解析的问题
2010-04-05 amoeba-mysql-1.2.0-RC1
1、添加规则函数case、range、增加表达式 (boolean表达式 ? 表达式1: 表达式2)
range函数:
id in range(12,16,0,1) 表示 id>12 and id<=16
id in range(12,16,0,0) 表示 id>12 and id<16
id in range(12,16,1,0) 表示 id>=12 and id<16
id in range(12,16,1,1) 表示 id>=12 and id<=16
case 函数
case (abs(hash(SDID)) % 32) when range(0,8,1,0) then (isReadStatment ? ’server1′ : ’server1_write’);
when range(8,16,1,0) then (isReadStatment ? ’server2′ : ’server2_write’);
when range(16,24,1,0) then ‘(isReadStatment ? ’server3′ : ’server3_write’)';
else ’server4′
END CASE;
2、增加bool 类型的规则内置变量 isReadStatment
用户可以在规则的表达式中使用比如 : isReadStatment? ‘pool1′ : ‘pool2′
3、稳定性增强,解决了在大并发下需要多个数据库聚合结果集的时候出现数据异常而无法返回给客户端的问题
4、规则属性新增加ruleResult属性,有3种类型(BOOLEAN、POOLNAME、INDEX)
BOOLEAN — 默认值、结果一定是布尔值,表示执行的sql是否匹配当前的规则
POOLNAME — 结果是字符串,是由dbpool名字组成的字符串,多个pool以分号间隔(rule中的defaultPools、readPools、writePools无效)
INDEX — 结果是数字 ,如果>=0 则表示当前规则匹配,并且将相关index的pool返回
<tableRule name=”LIST_FRIEND_GROUP,RELATION_FOLLOW” schema=”sd_relation”
defaultPools=”server1,server2,server3,server4″>
<rule name=”rule1″ ruleResult=”POOLNAME”>
<parameters>SDID</parameters>
<expression><![CDATA[
var hashid = abs(hash(SDID)) % 32;
case hashid when range(0,8,1,0) then (isReadStatment ? 'server1' : 'server1_write');
when range(8,16,1,0) then (isReadStatment ? 'server2' : 'server2_write');
when range(16,24,1,0) then '(isReadStatment ? 'server3' : 'server3_write')';
when range(24,32,1,0) then '(isReadStatment ? 'server4' : 'server4_write')';'
END CASE;
]]></expression>
</rule>
</tableRule>
5、支持select last_insert_id()/ @@Identity --最后一次自增长的ID
6、规则函数中,增加自定义变量(格式 var 变量名称= 变量值 ;) 比如: var hashid = abs(hash(SDID)) % 32;
Amoeba for mysql 1.1.0-BETA发布
主要解决以下问题:
1、解决amoeba运行一段时间以后可能出现阻塞
2、修复个别sql解析问题
3、重构了ConnectionManager,去除之前读取数据包采用线池的方式,改成目前采用MultiConnectionManagerWrapper,采用多个(具体多少默认由可用的cpu 核数量决定)ConnectionManager进行负责网络IO, 而每个ConnectionManager都是一个单线程
注意:与之前的amoeba.xml在配置上有点出入(defaultManager 的配置与之前不一样了)
修复bug列表:
1、修复无法解析抛出unknown statement(1.0.0新bug)。将无法解析得sql默认在defaultPool中执行
2、修复union关键字无法解析问题
3、修复函数前面! 无法解析问题
4、修复order by 、group by 后面带表达式得sql
Amoeba 默认设置支持客户端设置编码的方式是 : set names gbk 其他方式目前还没考虑到。
Discuz遇到编码问题,可以通过修改 include/db_mysql.class.php 里的 设置编码方式改成:
set names utf8
–即支持utf8编码格式
原文来自:
http://hi.baidu.com/hlxwell/blog/item/ea0d445913af102d2834f0d5.html
该版本基于0.32版本之上进行bugs fixed,非常感谢阿权提供的一些bug列表
这次版本跳跃比较大,也是我打算在amoeba这个项目花下时间的决心。因此将amoeba提升到新的起点1.0.0版本
下面是这次主要的变更:
1、修复sql解析 explain 关键字开始的sql
2、修复FORCE INDEX (xx) 之类的sql无法解析问题
3、修复包含转义符合在内的sql 比如:insert into xx values(’\'test\’)
4、修复包含 Order by rand()的sql
5、调整默认 网络接受发送缓冲区成128k
1、性能提升
首先感谢sun ISV Engineering Jenny在测试amoeba性能花了不少时间。
针对 sun 公司ISV Engineering Jenny 提出了一个系统write函数调用频繁得问题。在0.31版本上面做了一个延迟写数据包直到设定得ByteBuffer 满了或者强制写 才调用Write 将数据写出去,这个动作带来整体响应速度将提升20%左右。
2、修复select …. for update sql语句解析出错的bug
3、com.meidusa.amoeba.server.MultipleServerPool 负载参数增加 HA 方式,设定方式
1=ROUNDROBIN , 2=WEIGHTBASED ,3=High Availability
<property name=”loadbalance”>3</property>
这种方式主要是为了writable database <-> writable database采用复制,并且需要避免同时写操作。因此采用HA的方式。这种方式只有一个pool对外提供服务,而另外其他pool 在 第一台pool出现故障或者shutdown以后才会开始对外服务。
-EOF-
主要解决困扰几个月的timeout问题。
主要是mysql server 要求客户端在认证身份的时候采用老的加密方式,而这个问题恰恰是我没考虑到的,因此导致amoeba 没有收到mysql server返回的ok数据包,直到认证超时。今天总算将这个bug处理了!
在此非常感谢网友刘雅猛的辛苦测试,多次抽出宝贵的时间为amoeba进行测试跟反馈。