最近因为一个大作业,我需要建立一个分布式数据库系统。Oracle和DB2固然强大,但巨大的资源占用以及软件授权的限制让我放弃选择它们。我的目标是寻找轻量级的、免费(最好是开源)的解决方案,最终目标锁定在国产的amoeba上。
amoeba是一个以MySQL为底层数据存储,并对应用提供MySQL协议接口的proxy。它集中地响应应用的请求,依据用户事先设置的规则,将SQL请求发送到特定的数据库上执行。基于此可以实现负载均衡、读写分离、高可用性等需求。与MySQL官方的MySQL Proxy相比,作者强调的是amoeba配置的方便(基于XML的配置文件,用SQLJEP语法书写规则,比基于lua脚本的MySQL Proxy简单)。有关amoeba的更多信息可以参考其文档或作者blog。google出来的相关信息并不多,不过作者的这个帖子(含回复)倒是值得一看。
下面说说我的理解:
1、amoeba相当于一个SQL请求的路由器,目的是为负载均衡、读写分离、高可用性提供机制,而不是完全实现它们。用户需要结合使用MySQL的Replication等机制来实现副本同步等功能。amoeba对底层数据库连接管理和路由实现也采用了可插拨的机制,第三方可以开发更高级的策略类来替代作者的实现。这个程序总体上比较符合KISS的思想。
2、由上一条,建议使用MySQL的Replication机制建立Master-Slave来做副本。我一开始理解有误,使用了amoeba的virtual DB(负载均衡pool)做writePool,结果使得本应插入同一个表中的数据被拆分地写入了不同的物理数据库中。这样自然与副本的语义不符了。
3、amoeba已经实现了数据的垂直切分与水平切分。水平切分方面,粒度是行。使用SQLJEP语句可以设计出复杂的切分规则,个人认为是比较强大的。垂直切分的粒度是表,可以把针对不同表的请求发送到不同的节点上执行,但不能以列作为分片粒度。从作者的说法看,amoeba不做SQL解析和重写。在目前的机制下似乎是难以实现同一个表不同的列在不同节点上的分布。不过对开发人员来说,设计良好的表结构应该可以实现简单的基于关系属性的负载均衡的。
要说这个项目最大的不足,我想可能是文档方面的:
1、软件的文档(0.31版)主要在讲解配置文件怎么修改,却没有说怎么运行amoeba。我以前没有MySQL Proxy以及Java工程方面的经验,下载解压amoeba之后,第一感觉这是一个数据库中间件,要通过Java API编程使用,所以我还纳闷文档中为什么没有API的说明。仔细一看才发现bin目录下有启动脚本。回到文档,发现只在最后的“amoeba性能调优”一节才提到了“amoeba启动脚本”。希望作者改进下一版的文档,让新手不要再疑惑。
2、文档的“amoeba for aladdin”一节说“(amoeba for aladdin)其性能比MySQL Proxy也好,但比amoeba for mysql微微差了点”,看起来性能优劣是“amoeba for mysql>amoeba for aladdin>MySQL Proxy”;但在这个帖子的回复中,作者又说“(amoeba for mysql)比官方的MySQL Proxy性能大致低10%~20%左右”,两处似乎有矛盾。继续翻这个帖子,才发现原来在0.27版本以后,amoeba的性能逐渐超过了MySQL Proxy。所以,希望作者可以完善一下文档,并在官方网站或blog的显著位置说明最新版本的特性,以免引起误会。
3、amoeba是一项优秀的工作,有必要提供完整的英文文档,以便国际推广。
分享到:
相关推荐
利用matlab对am,dsb,ssb,ask,fsk,bpsk信号进行正交调制解调仿真,并在不同信噪比条件下对其数字信号进行了误码率的计算。.rar
任务悬赏活动,带分销返佣
行业分析报告
2024年中国控制膨胀合金箔行业研究报告
本项目是基于Java的Servlet和JSP的404错误处理设计源码,包含46个文件,其中主要包含18个jsp页面文件,12个xml配置文件等。系统采用了Java编程语言,实现了基于Servlet和JSP的404错误处理功能。项目结构清晰,代码可读性强,易于理解和维护。
java练习题
行业分析报告
GTM模式在华为产品营销中的应用glz.pptx
GUI API包含的类分为三个部分:组件类(component class) 容器类(container class),和辅助类(helper class) 1. 组件类是用来创建用户图形界面的,例如JButton,JLabel,JTextField. 2. 容器类是用来包含其他组件的,例如JFrame,JPanel 3. 辅助类是用来支持GUI组件的,例如Color,Font
1、嵌入式物联网ESP32项目实战开发。例程经过精心编写,简单好用。 2、代码使用Visual Studio Code + ESP-IDF开发,C语言编程。例程在ESP32-S3上运行。若在其他型号上运行,请自行调整。 3、如果接入其他传感器,请查看发布的其他资料。 4、ESP32与模块的接线,在代码当中均有定义,请自行对照。 5、若硬件差异,请根据自身情况适当调整代码,程序仅供参考。 6、代码有注释说明,请耐心阅读。 7、技术v:349014857;
六数码问题解决方法 可类比到八数码 一个小小的六数码问题求
引言 年度工作回顾 系统进展与亮点 技术创新与应用 市场反馈与用户评价 存在问题与挑战 未来展望与计划 结束语与感谢 一、引言 简要介绍智能家居系统的重要性和发展趋势 回顾本年度的工作目标和重点 二、年度工作回顾 系统建设与维护 完成的项目与里程碑 系统稳定性与可靠性提升 团队建设与培训 团队成员构成与职责 培训与技能提升活动 合作伙伴与资源整合 与供应商、合作伙伴的合作情况 资源整合与利用 三、系统进展与亮点 功能扩展与优化 新增功能介绍与效果评估 现有功能的优化与改进 用户体验提升 界面设计与交互优化 用户反馈与改进措施 四、技术创新与应用 物联网技术的应用 传感器与通信技术的升级 大数据分析与应用 智能家居的智能化管理 自动化控制与节能策略 安全防护与预警系统 五、市场反馈与用户评价 市场反馈分析 市场需求与竞争态势 市场占有率与增长趋势 用户评价总结 用户满意度调查结果
Youtube Video Player+Youtube API Unity播放YouTube视频插件包unitypackage 支持Unity版本2019.4.40或更高 在您的游戏或项目中播放 YouTube 视频。适用于台式机、控制台和移动设备。您可以在任意位置播放 YouTube 视频。 描述 9 年提供在 Unity 项目中播放 YouTube 视频的解决方案。 现在支持字幕您可以搜索视频、频道、获取视频缩略图和有关视频的信息。您可以从YouTube API获取所有视频数据。 (需要添加自己的api,包含教程)。 使用 Unity 视频播放器或自定义播放器播放 YouTube 视频。 我们支持直播视频,但此功能不适用于 Unity 视频播放器,您需要一个支持 HLS 的视频播放器。
行业分析报告
通信原理通信课后答案02.doc
本项目是基于JavaScript的小区物业管理系统设计源码,包含319个文件,其中主要包含81个js脚本文件,71个jsp页面文件,66个java源代码文件等。系统采用了JavaScript、Java和CSS技术,实现了简单的小区物业管理系统。项目结构清晰,代码可读性强,易于理解和维护。
时间序列预测的informer模型python代码分享
tomcat10安装包(含windows和linux版本).zip
行业分析报告
电子通信设计资料笔记本电脑的智能底座设计论文及其资料提取方式是百度网盘分享地址