工作总结数据库集群
2015-10-05 18:10
288 查看
我使用数据库集群的时间并不算太长,我尽量将自己的一些感悟和心得总结下来。 首先数据库集群解决TB级的数据量就不得了,上了PB级,理论上还是nosql更好。基于postgres常用的集群解决方案有以下几种 postgres-xc,postgres-xl,pl/proxy,greenplum和postgres-x2 postgres-xc:浙江移动在用,貌似bug有不少,据传把postgres-xc的发起人从日本请过来帮忙解决问题。 pl/proxy:pl/proxy很多大型公司在用,包括斯凯(NASDAQ:MOBI),它的可控性很强,但是它的开发量相对较大。pl/proxy我看过的资料比较多,它的本质就是一个架构于多台postgres数据库之上的水平拆分中间件。是由用户去定义函数,根据参数确定SQL语句交由指定的底层数据库处理,或并发的执行于多台底层数据库之上。其实正因为它的底层就是未作修改普通postgres数据库,所以它的风险系数较低。 greenplum:它早期被EMC收购,EMC就是提倡"去AOE"中"E"。它功能强大,售后服务也好,不过是基于postgres8.4版本的,所以新版本的数据库特性无法使用。它的商业版收取的维护费用价格不低。阿里巴巴,包括很多移动公司也在使用。可靠的消息,它目前已经确定正在进行做开源的准备。 postgres-x2:由李元佳和postgres-xc架构师铃木市一联合发起旨在融合Postgres-XC/XL一个项目。 ======================================================================================================================== postgres-xl:它是基于postgres-xc演化而来,也是我的工作重点,下面尽可能回忆过往使用中遇到的问题,以及详细的描述一下解决方法。 搭建过程:参考这篇blog可以搭建成功,http://blog.163.com/digoal@126/blog/static/163877040201441423449445/ ,我不再累述,早期blog曾有几处错误,不容易发现,如今blog中错误已经被作者修改。 使用过程: 给几个使用例子: create table tt(c1 serial8 primary key,c2 text) distribute by hash(c1) to group groupnode; 创建表tt 字段c1,c2,分配规则根据c1的hash取值,对群组groupnode生效。 insert into tt(c2) values ('a'); insert into tt(c2) values ('b'); insert into tt(c2) values ('c'); insert into tt(c2) values ('d'); insert into tt(c2) values ('e'); insert into tt(c2) values ('f'); insert into tt(c2) values ('g'); 插入和普通插入没有区别 select * from tt 查询和普通查询没有区别 EXECUTE DIRECT ON (data101) 'select * from tt' EXECUTE DIRECT ON (data102) 'select * from tt' 分别查询data101号节点的数据和查询data102号节点的数据 drop table tt 删除和和普通删除没有区别 注意:查询的时候可以指定只查询某个节点,但是插入的时候不可以强制把数据插入某个节点,其实仔细想想就很容易明白。因为普通查询,他会根据字段的hash找到指定的节点,一旦强制插入某个节点,那么它的hash寻找到的节点很可能就是不正确的。 性能瓶颈: 我观察到的性能瓶颈有2个方面,其一,因为所有的数据需要通过gtm管理,之后分配到它自己所对应存在的节点上。节点与节点的网络通讯会造成很大的一部分性能开销。除非配置更好的网线网卡,否则是不可避免的。其二,就是插入的时候,集群的序列是全局共享的,所以gtm为了保证序列的唯一性也消耗了很多的性能作为代价。 问题总结: 搭建的过程最初出现过一些麻烦,主要就是防火墙之类,关闭后就好了,或者因为缺少依赖库,依赖包,找到对应的安装后,也没有问题。还有一个印象比较深的就是,我默认的配置是根据ip来寻找节点,但是后期架设hadoop的时候,因为修改了/etc/hosts文件,造成了我集群无法启动。虽然我配置了是根据ip访问节点,但是/etc/hosts如果存在内容,它还是优先选择hosts的域名作为通讯的目标。起初hadoop搭建了2个集群,/etc/hosts的配置有些缺陷,造成了某2台机器间,根据域名是不能互相拼通的,所以我的集群也无法起来,我通过降低日志的级别到debug级别,观察日志发现的,最后修改/etc/hosts文件解决了此问题。
相关文章推荐
- SQL server 数据库中的数据操作
- [笔试时]SQL练练手
- sessionFactory 生成数据库表
- 数据库更新数据时的传值问题
- iOS 开发之封装一个 sqlite3 数据库
- 【mongoDB运维篇④】Shard 分片集群
- DDD开发框架ABP之本地化资源的数据库存储扩展
- MySQL数据库多种优化方案
- Oracle存储过程实例
- mysql的索引
- HTML5权威指南--Web Storage,本地数据库,本地缓存API,Web Sockets API,Geolocation API(简要学习笔记二)
- Oracle触发器实例
- MySQL备份与恢复
- Redis源码阅读-sds字符串源码阅读
- 完整java开发中JDBC连接数据库代码和步骤
- MySQL命令大全及查询语句
- (转)完整java开发中JDBC连接数据库代码和步骤
- 数据库性能优化的方法(转)
- hibernate.cfg.xml配置(Oracle+c3p0)
- mysql 卸载-安装-主从集群