discuz on amoeba 乱码问题解决
Amoeba 默认设置支持客户端设置编码的方式是 : set names gbk 其他方式目前还没考虑到。
Discuz遇到编码问题,可以通过修改 include/db_mysql.class.php 里的 设置编码方式改成:
set names utf8
–即支持utf8编码格式
原文来自:
http://hi.baidu.com/hlxwell/blog/item/ea0d445913af102d2834f0d5.html
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
很多人使用mysql odbc驱动来连接amoeba。在其中出现各种问题
amoeba目前只解析mysql 协议10 以上版本,或者是mysql 4.1以上版本。
mysql ODBC 3.51 (ODBCAD32.exe)测试通过
mysql ODBC 5.1 (ODBCAD32.exe)测试通过(建议使用)
请大家别用其他连接参数,比如压缩流(个别版本会引起工作不正常)
该版本主要是做了bug fix
1、修正sql中包含Escape 关键字解析出错
2、amoeba.xml dtd升级
3、规则模块进行了重构。
该配置仅仅用于amoeba for aladdin 应用
JdbcConnectionFactory 该factory提供 java.sql.Connection 对象 。
1、属性Driver: 也就是jdbc 驱动类,一般数据库都支持jdbc driver。以方便使用java语言作为开发工具的使用者。
如果配置了相应数据库的Driver,则必须将类库放到lib下面,才能被amoeba装载
2、属性url :该jdbc数据库连接的有效连接地址,诸如mysql的 url(jdbc:mysql://127.0.0.1:3306/test)
3、properties:这个属性是jdbc Driver的属性,比如 user、password还有一些driver特定的属性。
4、com.meidusa.amoeba.jdbc.DriverWrapper 如果你的应用程序跟数据库之间需要特殊的编码转换,那么这个用于处理客户端、与数据库编码相当灵活。
这个类有2个属性:
clientEncoding –客户端往TCP包写入字节码的编码
serverEncoding –数据库返回字节码数据的编码
<!– PoolableObjectFactory实现类 –>
<factoryConfig class=”com.meidusa.amoeba.jdbc.JdbcConnectionFactory”>
<!– driver name, pls put mysql jdbc driver into lib folder –>
<property name=”driver”>
<bean class=”com.mysql.jdbc.Driver”/>
</property>
<!–
<property name=”driver”>
<bean class=”com.meidusa.amoeba.jdbc.DriverWrapper”>
<property name=”driver”>
<bean class=”oracle.jdbc.driver.OracleDriver”/>
</property>
<property name=”clientEncoding”>gbk</property>
<property name=”serverEncoding”>ISO_8859_1</property>
</bean>
</property>
–>
<!– jdbc url. –>
<property name=”url”>jdbc:mysql://127.0.0.1:3306/test</property>
<!– url –>
<property name=”properties”>
<bean class=”java.util.Properties”>
<!– 用于登陆mysql的用户名 –>
<property name=”user”>root</property>
<!– for mysql driver –>
<property name=”characterEncoding”>utf8</property>
<!– 用于登陆mysql的密码 –>
<!–
<property name=”password”>password</property>
–>
</bean>
</property>
</factoryConfig>
-EOF-
即将发布的amoeba for mysql 0.32 / amoeba for aladdin 0.4 在配置文件上面做了升级,目前只有function.dtd做了不兼容的改动
修改的项目:
1、connectionManager、factoryConfig、poolConfig、queryRouter 增加classs属性,即将去除 className
<connectionManager name=”defaultManager” class=”com.meidusa.amoeba.net.AuthingableConnectionManager”>
<className>com.meidusa.amoeba.net.AuthingableConnectionManager</className>
</connectionManager >
2、property元素增加bean element,如下格式。这种设置除server中的property。
<property name=”runnerParameters”>
<bean class=”java.util.Properties”>
<property name=”xmlTable”>${amoeba.home}/conf/table.xml</property>
</bean>
</property>
3、rule.xml dtd格式改动,parameters增加 excludes属性,如下
<rule name=”rule1″>
<parameters excludes=”NAME”>ID,AGE</parameters>
<expression><![CDATA[ ID <= 1000000 and age > 12]]></expression>
<defaultPools>server1</defaultPools>
<readPools>server1</readPools>
<writePools>server1</writePools>
</rule>
该设置主要是当sql条件中包含了name=’abc’ ,而name又可以作为另外一个规则的时候,这个时候这条规则将被忽略
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-
首先感谢很多amoeba for mysql的使用者对amoeba投入了生产环境的使用,也有些正在做一些性能上面的测试,这儿我建议能够提升amoeba性能的几点:
1、在可用性测试已经完成的情况下,建议将log4j.xml 中关于日志输出level为debug的全部设置成warn或者error 级别。
日志是非常消耗系统性能的,在没有必要的情况下可以不使用debug。
2、性能测试环境: amoeba 对 cpu的要求比较高,建议将amoeba配置在多核/多cpu的机器上面。
3、amoeba多线程配置,默认只有20~30个线程,在多核/多cpu 的情况下建议开大。
4、amoeba与数据库连接数配置:在性能测试并且客户端并发量不大的情况下,建议将amoeba与数据库的连接数跟客户端与mysql的并发连接数尽量相等,这样保证一个客户端连接可以获得一个数据库连接。
Aladdin项目是针对企业数据库整合而产生的另外一种数据库切分、读写分离、负载均衡的中间件产品,是amoeba的子产品。沿袭了amoeba其他产品的特性(amoeba for mysql)。
Aladdin产品简介:
与Amoeba for mysql 类似,客户端连接aladdin必须用mysql 协议,之所以用mysql协议,主要是想借助mysql使用的广泛程度以及对各种开发语言的支持,因此aladdin对客户端采取了mysql协议以方便适应广泛的使用者。aladdin后端可以同时连接各种数据库。只要这些数据库提供jdbc驱动。aladdin的出现可以解决企业在数据库整合上面提供积极的帮助。使用者不需要知道后端到底使用了什么类型的数据库、数据库的物理地址什么,这些由aladdin来分析sql语句,并且获得相应的要查询的表跟条件,然后由这些规则结合这些条件进行路由到相关的物理数据库。

主要解决困扰几个月的timeout问题。
主要是mysql server 要求客户端在认证身份的时候采用老的加密方式,而这个问题恰恰是我没考虑到的,因此导致amoeba 没有收到mysql server返回的ok数据包,直到认证超时。今天总算将这个bug处理了!
在此非常感谢网友刘雅猛的辛苦测试,多次抽出宝贵的时间为amoeba进行测试跟反馈。