postgresql 30万数据需要分表吗
数据库总大小:173GB、总记录数:4千万零450条、信息数量:2千万条、单表最大信息数:400万条 一、前言: 帝 国CMS 60版本最重要的升级功能是对系统构架进行升级,构架更加完美、负载容量更大。然而很多人就问,这个全新的构架有多大的魅力、容量是多少?其实我也不能 准确的告诉你,因为60刚发布不久并且没有空闲时间测试,那时我只能告诉你“总体容量可无限放大,单表存放容量是原来的几十倍、甚至更多,副表数据量达 到一定大小后可设置分表,副表支持无限分表,因而副表容量是无限的”。然而理论是需要实践去验证的,所以趁着这两天比较空闲试着测试,并且测试结果令我非 常吃惊, 在2000万数据中最大的news单表中从50万导到400万数据无论从生成内容页效率还受理信息列表竟然没有多大差别: 单表无论是50万还是400万生成5000个内容页速度为:19秒 单表无论是50万还是400万后台管理信息列表速度为:0009秒 二、测试环境 1、硬件配置:使用本人工作使用的机器测试,普通的配置 CPU:20 GHz 内存:1GB 2、软件环境:使用无任何优化的帝国CMS60一键安装包 WINDOWS 2003 APACHE 224 PHP 520 MYSQL 5027 ZEND Optimizer 326 帝国CMS60开源版(GBK) (注:因为只是测试所以采用效率比较一般的WINDOWS平台,最好的PHP+MYSQL运行环境建议采用LINUX或UNIX平台。) 三、以2000万数据中最大的news表数据量为400万、数据表大小为34GB为例: 400万单表情况下生成5000条数据:19秒 1、后台点管理信息列表速度: 0008秒 2、修改信息页读取数据: 0005秒 3、400万单表情况下生成5000条数据: 19秒 开始生成: 生成过程截图: 5000条生成时间:19秒 查看成后的栏目目录HTML: 4、测试在使用内容动态页的数据读取速度: 00025秒 四、由于章节比较多,所以不能在贴子中说明,点击下面链接查看完整的测试过程 《2 千万数据、173GB数据库用帝国CMS60分表合理存放》分成数个篇章对帝国CMS大数据量如何合理存放的进行介绍,整个测试过程都是边运行边截 图,采用透明、公开的方式供大家监督!如果有谁对测评过程和测评结果有疑问,可以自行参照我们的测试过程搭建类似的测试环境自己测试和对比测试结果。 点击这里查看完整的测试过程:/ecms6/jm/20000000/20000000html 五、本次2000万数据最终测试数据统计: 本次测试经验总结: 优点: 60在大数据下的优势非常明显,生成内容页、动态内容页效率非常之快且不受数据量影响,解决了CMS负载最大的问题,并且使用按表管理信息列表速度很快,单表几十万和几百万数据没有明显区别。 不足之处: 在 于单栏目数据量大于200万时标签调用、栏目列表速度有所下降(指的是增加检索条件的情况),主要由于最耗资源的置顶排序与多重排序,下版会考虑删除置顶 功能与优化列表,并且会增加大数据量标签调用优化处理功能,以达到所有页面速度在大数据量都很优秀,不仅是内容页效率优秀。 本次测试 2000万只是本人空闲时搞的小测试,主要让大家知道帝国分表如何处理更好,只要分表均匀可以将一个很大的数据分解成无数个相同效率的表,单表无论是50 万、400万甚至1000万数据在管理信息列表与生成页面效率基本是相同的,例如:5000万数据中12个栏目可以分成每表存放450万,每个450万数 据表效率都是一样的。未来版本帝国将会推出更完美的构架,主表可以像副表一样无限分表,让系统性能再度翻倍提升。做一个完美的安全、稳定高效、强大、灵活 的CMS是我们的终极目标,多年来我们一直朝这个方向迈进,不断创新不断完善。帝国软件以为中国网站提供最完善的建站解决方案为已任,打造国内最好的 CMS程序。 帝国CMS对大数据情况建议: 数据表结构最好的优化是将所有的自定义字段都存放到副表;主表只存放标题字段; 总体的数据表数据分配均匀,主表下的每个副表存放建议100万数据以内; 内容页减少标签调用或采用JS调用或者采用shtml包含最新内容页面的方式; 栏目列表设置最大显示数量; 过期信息或不再调用的信息进行归档; 减少使用搜索,搜索是最耗资源的功能; 自行修改文件去除标签和列表的置顶排序(置顶功能下版会默认删除),对性能更高要求的可只采用id排序; 优化运行环境,特别是MYSQL数据库优化; 服务器配置最好2GB以上内存、采用更快的CPU以及硬盘转速缓存更高IO更快。 未来帝国CMS版本对大数据方面功能展望: 标签调用与列表性能优化,删除置顶功能并且对标签调用优化处理;主表结构更加优化。 推出更完美的构架,主表可以像副表一样无限分表,让系统无论从维护数据还是生成页面性能将再度翻倍提升。 多服务器结构支持,实现负载均衡。 增加Oracle、postgresql、Mssql等多种数据库支持。 更多功能我们正在不断的探索与创新,相信会给大家更多的惊喜。 附:帝国CMS60系统数据构架图
运维工程师干些什么
总结两句话
1、保障业务长期稳定运行(如网站服务器、游戏服务器等等)。
2、保障数据安全可靠(如用户名密码、游戏数据、博客文章、交易数据等等)。
由这两句话推演运维工程师要学些什么
一、保障业务长期稳定运行
出一点点差错,用户就要投诉了。
1、业务跑在什么上面?
网站服务器一般是apache,nginx,tomcat等。但是真正跑通流程还需要Mysql数据库来存储用户密码及其它。很多程序都要php的解析,所以LNMP、LAMP(即nginx、apache、mysql、php)环境部署是必须掌握的技能。
2、业务出了问题怎么及时知道?
这就需要监控软件来邮件或短信来通知你,常用的有zabbix,nagios等。报警发邮件,也得一个邮件程序呀,sendmail或postfix。
3、在家里收到报警,但服务器是内网IP,怎么也得解决问题吧?
在公司搭建open***或pptp或openswan,在家里通过***拨入内网,24小时解决问题唉,半夜爬起来解决问题也没工资。
二、保障数据安全可靠
出一点点差错,领导要找你喝茶了。
1、有时需要手动改数据库内容?
所以要会基本的Mysql数据库增删查改命令。
2、万一数据库服务器硬件坏了怎么办?
需要有个备库以备不时之需,所以需要Mysql主从复制。
3、数据库要还原怎么办?
所以需要在crond中定期全备Mysql数据,以便还原使用。如果要还原到指定时间点,还要学会Mysql增量备份与恢复。
4、如果是用户上传的或文件服务器坏了怎么办?
定时备份可能还不够,需要使用rsync加inotify来实时备份。以便任一时刻主服务器坏掉,也能保障所有有备份可以用来恢复。
5、小心黑客,要增加服务器安全性?
ssh轻易不能让外人访问,那么就设置只允许公司的IP或跳板机IP访问,这些都通过iptables来控制。
三、大性能
小公司总有一天会牛逼起来的,实在牛不起来咱也可以跳到大公司。
1、越来越多的用户来访问我们的网站,一台web服务器抗不住了怎么办?
那就需要多台web服务器来负担,但多台服务器之间怎么进行负载均衡呢,这就需要用到nginx反向代理或LVS+keepalived或haproxy+heartbeat了。
2、用户注册发表的文章与评论太多,一台数据库抗不住了怎么办?
数据库压力分为读和写,如果写抗不住,需要进行分表分库到多个服务器上。如果是读压力不够了,可以使用mysql-proxy读写分离,来分担读的压力。更简单方便的方法,把数据库里的内容放到内存上,这就用上memcache或redis了。
3、N多用户上传下载文件,磁盘抗不住了怎么办?
把多块磁盘做成raid,或者使用分布式存储文件系统如MFS,GlusterFS来提高磁盘的读写能力。
4、网站上好多,总有用户反应网站加载太慢,怎么办?
这时可以把网站上的通过squid或varnish缓存到网站前端,尽可能的增加访问速度,当然,最好是购买商业的CDN加速。
5、运营商是个大难题,他们之间的带宽好像很小,联通IP访问我电信网站怎么就这么慢呢?
这时可以使用bind自建一个DNS服务器,把网站的DNS记录指向自建DNS服务器上,配置好解析规则,以后联通IP解析到联通网站上,电信IP解析到电信网站上,体验就会好很多啦。
四、自动化
终极目标:跑死机器,闲死人。
1、公司新买100台服务器,公司竟然就1个移动光驱,这装系统得到什么时候?
使用kickstart或cobbler来网络远程自动安装系统吧。
2、每次装完机要优化很多内容,什么文件描述符、端口、软件安装啊,手动操作不累死去?
赶紧学会shell,将解放非常多的工作量。
3、系统装完后登陆要输入密码,这么多台啊?
使用expect吧,自动读取提示来输入密码,并执行命令。
4、要批量把新代码发布到线上服务器,怎么办?
使用saltstack或puppet或ansible吧,绝对爽歪歪。
五、其他
1、搭整套测试环境需要5台服务器,但公司穷的只有一台空闲服务器?
学会xen或kvm或docker吧,虚拟出多台服务器,就能解决资源问题了。特别是docker,强烈推荐,以后某个研发人员让你部署一套新环境,分分钟帮他解决。
2、研发人员的代码控制,权限控制,总要运维人员管呀?
svn或git,这个是肯定要有的。
结尾:
现在我们在回过头来思考,运维工程师平时干些啥呢?
1、随时解决报警故障。
2、业务程序更新。
3、编写一些脚本,监控或完成其他可自动完成功能。
4、运维架构完善,部署一些用起来更方便更可靠或性能更好的开源工具以及制定运维流程规范。
5、打杂,如调交换机,装系统,部署新环境等。
基本思想之什么是分库分表?
从字面上简单理解,就是把原本存储于一个库的数据分块存储到多个库上,把原本存储于一个表的数据分块存储到多个表上。
2 基本思想之为什么要分库分表?
数据库中的数据量不一定是可控的,在未进行分库分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。
0条评论