MYSQL优化项

一、基础规范(1)必须使用InnoDB存储引擎解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高 (2)必须使用UTF8字符集解读:万国码,无需转码,无乱码风险,节省空间 (3)数据表、数据字段必须加入中文注释解读:N年后谁tm知道这个r1,r2,r3字段是干嘛的 (4)禁止使用存储过程、视图、触发器、Event解读:高并发大数据的互联网业务,架构设计思路是“解放数据库CPU,将计算转移到服务层”,并发量大的情况下,这些功能很可能将数据库拖死,业务逻辑放到服务层具备更好的扩展性,能够轻易实现“增机器就加性能”。数据库擅长存储与索引,CPU计算还是上移吧 (5)禁止存储大文件或者大照片解读:为何要让数据库做它不擅长的事情?大文件和照片存储在文件系统,数据库里存URI多好 二、命名规范(6)只允许使用内网域名,而不是ip连接数据库 (7)线上环境、开发环境、测试环境数据库内网域名遵循命名规范业务名称:xxx线上环境:dj.xxx.db开发环境:dj.xxx.rdb测试环境:dj.xxx.tdb从库在名称后加-s标识,备库在名称后加-ss标识线上从库:dj.xxx-s.db线上备库:dj.xxx-sss.db (8)库名、表名、字段名:小写,下划线风格,不超过32个字符,必须见名知意,禁止拼音英文混用 (9)表名t_xxx,非唯一索引名idx_xxx,唯一索引名uniq_xxx 三、表设计规范(10)单实例表数目必须小于500 (11)单表列数目必须小于30 (12)表必须有主键,例如自增主键解读:a)主键递增,数据行写入可以提高插入性能,可以避免page分裂,减少表碎片提升空间和内存的使用b)主键要选择较短的数据类型, Innodb引擎普通索引都会保存主键的值,较短的数据类型可以有效的减少索引的磁盘空间,提高索引的缓存效率c) 无主键的表删除,在row模式的主从架构,会导致备库夯住 (13)禁止使用外键,如果有外键完整性约束,需要应用程序控制解读:外键会导致表与表之间耦合,update与delete操作都会涉及相关联的表,十分影响sql 的性能,甚至会造成死锁。高并发情况下容易造成数据库性能,大数据高并发业务场景数据库使用以...
查看全文 posted @ 2016-12-14 11:38:37

PDO MYSQLI MYSQL 的区别

MYSQL,MYSQLI 这两个扩展本身就是访问MYSQL数据库的驱动PDO则是一个抽象层接口向程序员提供可调用的API是由,MYSQL驱动、MYSQLI驱动,以及PDO来提供。PDO_MYSQL 是实现了PDO接口的MYSQL数据库驱动扩展,但本身不向用户提供API。实际上它处于PDO层的下层,为PDO提供MYSQL交互的功能Mysql Native(mysqlnd)虽然也是驱动扩展,但可以认为他不是API。从下表可以看出他们之间是怎样的关系 PHP的mysqli扩展PDO (使用PDO MySQL驱动和MySQL Native驱动)PHP的mysql扩展引入的PHP版本5.0+5.0+3.0之前PHP5.x是否包含是是是MySQL开发状态活跃在PHP5.3中活跃仅维护在MySQL新项目中的建议使用程度建议 - 首选建议不建议API的字符集支持是是否服务端prepare语句的支持情况是是否客户端prepare语句的支持情况否是否存储过程支持情况是是否多语句执行支持情况是大多数否是否支持所有MySQL4.1以上功能是大多数否
查看全文 posted @ 2017-02-10 11:35:01

PHP常用的设计模式

1.单例模式含义:单例模式顾名思义,就是只有一个实例。作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。要点:1. 一是某个类只能有一个实例;2. 二是它必须自行创建这个实例;3. 三是它必须自行向整个系统提供这个实例。场景:1. php的应用主要在于数据库应用, 一个应用中会存在大量的数据库操作, 在使用面向对象的方式开发时, 如果使用单例模式, 则可以避免大量的new 操作消耗的资源,还可以减少数据库连接这样就不容易出现 too many connections情况。2. 如果系统中需要有一个类来全局控制某些配置信息, 那么使用单例模式可以很方便的实现. 这个可以参看zend Framework的FrontController部分。3. 在一次页面请求中, 便于进行调试, 因为所有的代码(例如数据库操作类db)都集中在一个类中, 我们可以在类中设置钩子, 输出日志,从而避免到处var_dump, echo。示例:class man {     //保存例实例在此属性中     private static $_instance;     //构造函数声明为private,防止直接创建对象     private function __construct()     {         echo '我被实例化了!';     }     //单例方法     public static function get_instance()     {         var_dump(isset(self:...
查看全文 posted @ 2017-02-08 09:22:59

winform中RichTextBox控件设置关键字颜色

本文是针对RichTextBox控件进行了改进,改进后的RichTextBox控件将支持自定义关键字颜色, 就跟编辑器一样,是不是感觉很美好?在窗体Load事件添加如下测试代码  private void MainForm_Load(object sender, EventArgs e)         {             // Add the keywords to the list.             m_syntaxRichTextBox.Settings.Keywords.Add("function");             m_syntaxRichTextBox.Settings.Keywords.Add("if");             m_syntaxRichTextBox.Settings.Keywords.Add("then");             m_syntaxRichTextBox.Settings.Keywords.Add("else");             m_syntaxRichTextBox.Settings....
查看全文 posted @ 2016-09-22 13:51:42

关于百度贴吧登录提示(没有登录权限)的临时解决方案

近日, 有玩家反馈百度贴吧三国全明星游戏主页不能登录, 提示"没有登录权限", 如下图:有人说是辅助问题,其实不是. 是三国全明星首页不能登录, 但其他页面就可以登录.三国全明星首页的网页地址是: http://wanba.baidu.com/sgqmx/detail/ , 有兴趣的玩家可以用浏览器打开这个网页, 试试看是不是也提示"没有登录权限"(截至时间2016-07-05 09:19:26) , 这个问题我也反馈给百度贴吧项目组了.在没有更好的办法之前, 先告诉大家一个临时解决的方案.1. 打开辅助进入三国全明星选区页面时,这里不要点登录按钮.2.打开一个Internet Explorer浏览器,如下图:3.在Internet Explorer浏览器打开百度游戏中心首页, 网址是:http://tieba.baidu.com/game/index , 在这里有一个登录按钮,在这里可以登录,如下图:4.在上一步登录成功之后, 再次回到辅助页面, 点击辅助上面的刷新按钮,看看是不是回到了登录状态.5.如果要登录多个号, 就重复上面步骤即可. 是不是很简单的就解决了呢
查看全文 posted @ 2016-07-05 09:30:27

欢乐颂人物特点

我总结下大家的吐槽颂哈:邱莹莹的蠢,关雎尔的木,奇点的猥琐吃饺子不蘸醋。曲筱绡讨厌,赵医生随便,曲哥卡里两千块还敢出来现。王柏川心机,包总乱穿衣,安迪说别碰我别挡我装逼。樊胜美爱钱,林师兄没颜,老谭把持上海经济一百年!最后一句是亮点有没有
查看全文 posted @ 2016-05-09 16:18:01

关于百度贴吧平台在选择角色页面时死活点不了的解决方案

关于百度贴吧平台在选择角色页面时死活点不了的解决方案.1. 打开Internet Explorer(也就是IE)浏览器(记住,必须是IE浏览器),如下图:2. 点击浏览器的"Internet选项"3. 选项"隐私"选项卡,再点击"站点",如下图:4. 在网址地址框框中输入三国全明星游戏官网域名xba.com.cn,再点击允许,如下图:5. 最后操作成功的界面大概是这样,点击确定保存即可,如下图:6. 重启辅助,就可以正常使用啦....
查看全文 posted @ 2016-05-05 18:03:30

谈谈document.ready和window.onload的区别

在jQuery里面,我们可以看到两种写法:$(function(){}) 和$(document).ready(function(){})这两个方法的效果都是一样的,都是在dom文档树加载完之后执行一个函数(注意,这里面的文档树加载完不代表全部文件加载完)。而window.onload是在dom文档树加载完和所有文件加载完之后执行一个函数。也就是说$(document).ready要比window.onload先执行。那么jQuery里面$(document).ready函数的内部是怎么实现的呢?下面我们就来看看:我们来为document添加一个ready函数:document.ready = function (callback) {     ///兼容FF,Google     if (document.addEventListener) { document.addEventListener('DOMContentLoaded', function () {     document.removeEventListener('DOMContentLoaded', arguments.callee, false);     callback(); }, false)     }      //兼容IE     else if (document.attachEvent) { document.attachEvent('onreadytstatechange', function () {       if (document.readyState == ...
查看全文 posted @ 2016-05-04 17:44:10

TortoiseGit(乌龟git)保存用户名密码的方法

windows下比较比较好用的git客户端有2种:1. msysgit + TortoiseGit(乌龟git)2. GitHub for Windowsgithub的windows版也用过一段时间,但还是不太习惯。所以目前仍然青睐与msysgit+乌龟git的组合。TortoiseGit在提交时总数会提示你输入用户名密码,非常麻烦。解决方案如下:方法一:设置 -> git 编辑本地 .git/config 增加[credential]       helper = store保存,输入一次密码后第二次就会记住密码了方法二:1. Windows中添加一个HOME环境变量,值为%USERPROFILE%2. 在“开始>运行”中打开%Home%,新建一个名为“_netrc”的文件3. 用记事本打开_netrc文件,输入Git服务器名、用户名、密码,并保存:machine github.com       #git服务器名称login user          #git帐号password pwd  #git密码在windows上建_netrccopy con _netrc  #创建_netrc文件#依次输入以下3行:machine github.com    #git服务器名称login username        #git帐号password password     #git密码在最后一行后输入ctrl+z,文件会自动保存并退出再次在git上提交时就不用重复输入用户名密码了
查看全文 posted @ 2016-04-13 09:04:22

浅谈Redis数据库的键值设计

丰富的数据结构使得redis的设计非常的有趣。不像关系型数据库那样,DEV和DBA需要深度沟通,review每行sql语句,也不像memcached那样,不需要DBA的参与。redis的DBA需要熟悉数据结构,并能了解使用场景。下面举一些常见适合kv数据库的例子来谈谈键值的设计,并与关系型数据库做一个对比,发现关系型的不足之处。用户登录系统记录用户登录信息的一个系统, 我们简化业务后只留下一张表。关系型数据库的设计mysql> select * from login;+---------+----------------+-------------+---------------------+| user_id | name | login_times | last_login_time |+---------+----------------+-------------+---------------------+| 1 | ken thompson | 5 | 2011-01-01 00:00:00 || 2 | dennis ritchie | 1 | 2011-02-01 00:00:00 || 3 | Joe Armstrong | 2 | 2011-03-01 00:00:00 |+---------+----------------+-------------+---------------------+user_id表的主键,name表示用户名,login_times表示该用户的登录次数,每次用户登录后,login_times会自增,而last_login_time更新为当前时间。REDIS的设计关系型数据转化为KV数据库,我的方法如下:key 表名:主键值:列名value 列值一般使用冒号做分割符,这是不成文的规矩。比如在php-admin for redis系统里,就是默认以冒号分割,于是user:1 user:2等key会分成一组。于是以上的关系数据转化成kv数据后记录如下:Set login:1:login_times 5Set login:2:login_times 1Set login:3:login_times 2Set login:1:last_login_time 2011-1-1Set login:2:last_login_...
查看全文 posted @ 2016-04-12 18:13:31
top