About Amoeba
Amoeba(变形虫)项目,专注 分布式数据库 proxy 开发。座落与Client、DB Server(s)之间。对客户
端透明。具有负载均衡、高可用性、sql过滤、读写分离、可路由相关的query到目标数据库、可并发请
求多台数据库合并结果。
主要解决:
* 降低 数据切分带来的复杂多数据库结构
* 提供切分规则并降低 数据切分规则 给应用带来的影响
* 降低db 与客户端的连接数
* 读写分离
* 制定一种规则可支持DB线性扩容
目前在amoeba 框架上面已经实现了 amoeba for mysql.
amoeba 中文文档下载地址:
http://amoeba.meidusa.com/amoeba.pdf
amoeba 未来发展方向:
目前 DB 的发展方向很需要这种应用,太有用了!
我每期都关注。
Goooood job.
实在太感谢了~!
今天在DBA Notes注意到你的框架!发现这东西也正是我需要的!先熟悉一下!
你好:
今天看了你的介绍感觉比mysql-proxy好多了,尽管mysql-proxy好了很多,但是它还是对应用程序有些限制,(当然是我的lua基本功不够)我想问一下amoeba对应用程序有什么限制么?amoeba for mysql和amoeba for aladdin 各适合哪个种环境呢?
amoeba for mysql 后端数据库只用mysql,amoeba 对前端应用来说是一个mysql 数据库
amoeba for aladdin 后端可跟oracle 、mysql、postgresql等,未来可能还会支持其他数据库。此时for aladdin对前端应用来说还是一个mysql数据库
这2者在性能上面也是有差别的,for mysql 性能会比 for aladdin提升 20%以上
for aladdin主要优势在于后端可以配置各种数据库。
我去年做了一个基于PHP的分布式数据库query框架,跟这个项目非常相似。如果早发现这里,我就不用那么麻烦了。这个项目太重要了,强烈支持。
我有几个问题想请教一下:
1、请问如果使用了该项目以后,对数据库表的设计有什么建议?对sql语句的设计有什么建议?有什么需要特别注意和避免的问题?
2、对数据库存储过程、触发器和视图是如何支持的?能支持事务么?
3、上文提到Amoeba对CPU的要求比较高,不知道对内存的要求如何?
4、能不能在Amoeba的基础上再增加自定义的过滤器?
5、与直接操作mysql数据库相比,性能的损失大概在怎么一个范围?
--------------------------------------------
以下是回复内容:
1、目前amoeba能够解析绝大部分的sql,偶尔也发现有些sql目前解析的时候没考虑到,最近正在发布新的版本来解决一些sql解析异常的问题,这种sql往往没有采用sql 变量绑定的方式。
2、存储过程目前还没考虑进去,因为存储过程对amoeba来说是黑盒子,无法执行数据切分规则。触发器:只需要数据库关心,视图对amoeba来说与表处理方式一样,暂时不支持事务
3.普通的查询(非大结果集返回,比如一次请求返回几十万条)对内存要求不高。
4、未来可考虑这方面的过滤,比如过滤一些sql。或者拒绝某种sql的执行都可以做到。
5、amoeba是属于代理层,起码要消耗2次网络IO+ amoeba自身的计算时候的消耗,
如果数据库的性能非常高,或者sql的执行并不消耗数据库的磁盘IO,那么这时候完全不能体现amoeba的好处,反而会降低整体的性能。
具体数据目前没有算过。
你好!看了amoeba的说明,对这个项目非常感兴趣。
我想请教你一个amoeba的使用问题:
假设现在有两个表T1和T2,其中T1是海量的数据表,T2是中级数据量的表,T1和T2之间存在大量复杂的关联查询(join, 嵌套查询, in, exists等等)。由于T1的数据量太大,需要进行水平分割。该如何用amoeba来解决这个问题?数据库应该怎么规划?
急盼回答,谢谢。
———————————————–
以下是回复内容:
很难回答你的问题. 只能说是一个建议吧, 一个数据库的可扩展性在一定成都上面需要将需求分析的合理,并且需要有人把握好未来数据量的增长程度与数据库架构,有些需求可能换一种方式也能满足需求,我个人建议千万别在应用程序中,特别是大数据量的表进行join。最好将这种需求分步操作。在处理这类问题的时候千万不要图个快。
amoeba运行的时候,必须保持 命令提示行 就是那个dos界面存在吗?能不能把amoeba做 成一种 开机即运行、没有界面的服务。另外amoeba运行之后,每隔一段时间出现一段测试信息。有没有什么地方可以设置成不显示
D:\Amoeba\amoeba-mysql-0.32\bin>amoeba.bat
log4j:WARN log4j config load completed from file:D:\Amoeba\amoeba-mysql-0.32\bin
\..\conf\log4j.xml
log4j:WARN ip access config load completed from file:D:\Amoeba\amoeba-mysql-0.32
\bin\../conf/access_list.conf
2009-06-09 17:55:29,937 INFO net.ServerableConnectionManager - Server listening
on /192.168.2.10:8066.
——————————————————
以下是回复内容:
amoeba 日志输出可用调整他的日志输出级别,具体可用看 conf/log4j.xml 将 level 级别调大,level目前可用的有: error、warn、info、debug 由高到低的级别。
设置成debug则高的level日志将都输出。
关于windows下面service的服务方式目前还没有提供出来。
hi,fella,我想找一份类似配置详解的东东,不知道有没有哈
————————————
以下是回复内容:
下载一份里面有pdf文档的,你先看一下,如果有什么疑问可以提一下,虽然不全面但估计涉及到大部分配置内容。
比较弱,想问问有没有amoeba的客户端例子
——————以下是回复内容—————————–
你好,amoeba是属于代理层,是一层透明的,你可以不需要关注,只要将amoeba代理指定的目标数据库,客户端依旧采用mysql 驱动,将链接地址指到amoeba即可。
客户端使用的用户名与密码在amoeba安装目录下/conf/amoeba.xml中设置的
博主,你好,今天安装 amoeba,一直报错误:
2009-08-10 17:44:18,319 ERROR net.MysqlServerConnection - handShake with /127.0.0.1:3306 error:Access denied for user ‘root’@'localhost’ (using password: NO)
2009-08-10 17:44:23,322 DEBUG net.MysqlServerConnection - receive HandshakePacket packet from server:127.0.0.1:3306
2009-08-10 17:44:23,322 DEBUG net.MysqlServerConnection - authing packet sent to server:127.0.0.1:3306
2009-08-10 17:44:23,323 ERROR net.MysqlServerConnection - handShake with /127.0.0.1:3306 error:Access denied for user ‘root’@'localhost’ (using password: NO)
2009-08-10 17:44:28,326 DEBUG net.MysqlServerConnection - receive HandshakePacket packet from server:127.0.0.1:3306
2009-08-10 17:44:28,326 DEBUG net.MysqlServerConnection - authing packet sent to server:127.0.0.1:3306
2009-08-10 17:44:28,327 ERROR net.MysqlServerConnection - handShake with /127.0.0.1:3306 error:Access denied for user ‘root’@'localhost’ (using password: NO)
2009-08-10 17:44:33,330 DEBUG net.MysqlServerConnection - receive HandshakePacket packet from server:127.0.0.1:3306
2009-08-10 17:44:33,330 DEBUG net.MysqlServerConnection - authing packet sent to server:127.0.0.1:3306
2009-08-10 17:44:33,331 ERROR net.MysqlServerConnection - handShake with /127.0.0.1:3306 error:Access denied for user ‘root’@'localhost’ (using password: NO)
版本是:amoeba-mysql-1.0.0-BETA.tar.gz
这个是咋回事情 咋个解决
你好!看了amoeba的说明,好像amoeba是个开发框架,但是好像没有开发的说明,不知道博主是否有相关的介绍和资料。谢谢
我想请教几个问题:
1、如果客户端使用的PHP,不知道是否amoeba是否可以支持?
2、如果使用PHP的话,连接配置如何?
———————以下是回复内容—————————-
把amoeba当作mysql看待,php连接amoeba,amoeba连接mysql
具体配置可以参考pdf文档
在putty中运行./bin/amoeba&
正常,关掉putty,amoeba也会停止,为什么?怎么解决?
——————————–
nohup ./bin/amoeba &
应该可以解决你的问题
非常好的项目,感谢分析。
请问下陈大侠,现在amoeba对DDL,存储过程,函数的处理机制是怎么样的呢?
这些无法处理的情况是否都直接转发给了default server了?
-----------------以下是回复内容-----------------
是的,目前还不解析DDL语句
请问下陈大侠,为了提高可用性,我想用多台master服务器,amoeba支持这种结构吗?
————–以下是回复内容————-
hi,你好, 可以将你的想法说的更清楚一点吗?
你好,请问一下,现在最新版支持事务处理了吗?
另外对于水平分割的表而且还分服务器存放,在做全表统计GROUP BY的时候客户端是只管发送一条完整的SQL吗,剩下对多服务器存放的水平分割过的表的数据组合是由amoeba完成吗?
———————以下是回复内容——————————-
你好,amoeba使用也有一定的局限性,包括做全表统计,如果将这样的sql给amoeba,amoeba会将sql给各个后端的数据库,由各个数据库做好统计,amoeba只是将各个数据库的结果进行汇总而不会合并计算结果。如果后端有3台服务器,那么汇总以后将是3条统计数据返回。而且每个数据库只是统计自身内部的数据
<p>你好,请教个问题:由于数据量太大,在数据库oracle的表test存放不了,故存放到另一数据库mysql中(表的结构完全一样),我该如何完成统一操作呢,比如说:select * from test 如何将两个数据库中的test表的内容都获取到呢?谢谢</p>
—————–以下是回复内容———————-
不建议通过amoeba将所有表内的信息全部读出来,必然会造成内存问题
amoeba的存在的意义不是解决这类问题的,而是数据切分,小结果集的查询/更新操作.
如果你的表信息量少,select * from test 这种sql是可以全部返回的,只要设置一个 tablerule,将defaultPools 设置成所有包含有test表的dbserver列表.
你好!!哦用amoeba实现读写分离,出现应用程序有时不能select出结果,有时不能进行add的情况,是不是amoeba.xml文件配置错误啊。
-------以下是回复内容----------
还不清楚你的情况,最好能够将日志文件通过email发一份谢谢~
你好,看了您的项目之后感觉非常不错,我也在安装,但是有个小问题,连接时总报错:aq.executeQuery: No suitable driver found for 192.168.0.103:8066?这是什么错呢,整了一上午也没出来。
————-以下是回复内容————————-
只要你连接mysql没什么问题,连接amoeba应该也不会有区别,只要mysql的驱动支持4.1.1以上的就可以了
对于企业应用来说机器是不能停止的,不知道amoeba是否能够满足这一点:假如当我的项目采用了amoeba之后且运行了一段时间,但又想在运行时再新增加了一台物理数据库,这时可否在机器不停止服务的情况下修改配置文件,程序能够在运行时也能够识别出我的新物理机器?
——————–以下是回复内容——————-
目前暂时还不支持,未来的版本将会启用amoeba manager来在线管理.包括读写切换、规则调整、增加新的物理机器、监控等
您好!非常幸运看到您主导的amoeba项目,正好我有一个项目数据表太大,想实现分表操作,于是对amoeba项目进行了测试,在多服务器下amoeba项目使用确实给我带来了很大方便,但当我只是需要在同一个数据库中实现分表(如以年为表名进行分表),在分表表名不一样时就不知道如何操作了,我在想amoeba能否设置一个规则,从而能够从语句判断到哪一个表中(而不是判断到哪个服务器)去读取数据?现在amoeba是否已经有这种功能,只是我不会配置?期待回音
—————以下是回复内容———————
建议分表的操作还是通过前端业务来确定表名,目前amoeba还没有做到 根据规则到不同的表上进行操作
测试使用中遇到问题,如
在多联合查询或多重查询会用到临时表时,有问题,返回NULL
请教一下,是本身的支持问题还是配置问题?谢谢指点
—————以下是回复内容———————
可以通过amoeba 日志来定位问题所在,
可以给我发email
在查询语句中,不能有运算,否则返回结果为空?
—————以下是回复内容———————
可能是sql语句不能被解析?
可以看看amoeba的 log
你好,我们现在用 mysql,数据量非常大,插入每秒大概在 10000条,每天可以达到50G以上吧,目前遇到的问题是:
插入速度提高的话,就不能建索引,这样查询就慢了
请问 Amoeba 有什么办法没有
谢谢
—————以下是回复内容———————
数据切分。 不知道是啥应用? 每秒那么大的记录产生..应用场景又是什么呢?
只能查处一台数据库中的数据,另一台的数据查不出。
不知道哪里出了问题。
————-以下是回复内容—————
可能的原因有2个:
1 规则没有设置好
2 sql解析的时候出错,需要看一下log文件确认一下
我看了文档,不知道理解对不对,确认一下:
1、每个后端mysql实例都对应一组独立的连接池;
2、通过规则解析并转发客户端脚本。
这样的话,事务为什么不能支持呢?
这就好比一个多数据源事务,启用JTA是否能解决问题,虽然性能有所消耗,但不支持事务的写还有什么用(或者说谁敢用)呢?
————-以下是回复内容————————-
目前amoeba 暂时不支持事物,因为代价比较大,有些场景就不适合使用amoeba了
未来的版本会支持事物的,但目前这几个版本暂时不支持。
您好,再请教个问题。我使用聚合函数时,比如count、sum,查询出结果有多条,每个服务器上的库分别有一条对应记录。这里我有3台服务器做测试,返回3个结果,分别是每台服务器上的某张表的条数,而不是只有一个结果。请问我应该修改哪里才能达到只返回一条记录的效果?谢谢
——————-回复内容—————————
amoeba对于集合函数 不做结果集合并的
每个机器一条记录,需要客户端进行合并
继续上个问题,能不能通过SQL把这些记录组合成一个结果呢,因为不太想修改程序的代码。
—————-以下是回复内容————–
amoeba实现代价比较大,因为不清楚客户端到底是需要一条记录还是需要多条记录
即使是聚合函数,但也未知客户端到底想要是什么。所以做不了合并
谢谢博主的耐心解答及支持,也希望amoeba尽快支持事务。因为我买不起昂贵的F5公司的数据库服务器负载均衡软件,也不能接受mysql-proxy/spock-proxy较差的稳定性,程序又是以iBatis做持久化层,所以也用不了HiveDB,还有PyShards项目处于停滞状态,无人维护,也不提供源码下载。祝愿amoeba的未来会越来越好。
陈大侠你好!看到前面有人问到Amoeba是否支持多个Master,我想就这个问题再次请教一下,目前我们打算使用的drbd+heartbeat来实现双Master的故障切换,因此我想知道Amoeba在管理Master资源的时候是否支持虚拟IP的Master,打比方说,当Master发生故障切换的时候,Amoeba是否能很好的无缝使用,有无参数可设置?如连接超时时间,重连间隔等。谢谢!
-——————-以下是回复内容——————————
虚拟的Master 是可以的,但是这种还是有点风险的,可能会造成同时写的情况。
目前我正在完善双master HA的机制。这个机制将会在下一个版本提供
你好,我现在遇到一个情况,现在有C++的应用连接数据库是采用compress压缩代理的。amoeba没有可以设置这个也不支持compress压缩连接请求。我该怎么做,改什么源代码配置吗?比较急,谢谢
-——————-以下是回复内容——————————
抱歉!! 目前压缩还未实现….暂时无法提供,得麻烦你们使用的时候采用非压缩机制了