myslq优化-中间层

关系型数据库:
    在处理每个请求的时候需要做很多事情:SQL解释,查询优化,解释执行,事务管理,锁管理等等一系列操作损失了很多性能。但是对于性能要求比较高的应用不需要做这些操作,NoSQL产品就去掉了这些操作而提升了性能。

memcache+Myslq:流行并稳定,是成熟有效的方式;需要两份缓存(memcache+mysql本身);需要额外同步;需
                               要防止出现雪崩现象:有部分memcache故障导致DB服务器压力瞬间增大。
handersock+Mysql:没有上面流行到但是也没有上面需要注意的地方;不够安全;支持的存储索引不够完善
                               (innodb),不能保证充分稳定没有memcache成熟。比较适合海量数据、高并发的具有
                               简单业务模型的应用。

Myslq分层:(关系型)
SQL层 和 storage层:对于MYSQL 来讲的NoSQL就是把SQL层去掉直接存储---NoSQL。

Handsocket:作为Mysql插件,客户端(中间程序)可以通过两个方式去操作数据库
一般通过handsocket的数据库操作是添加、更新等写入操作
而通过复杂的MYSQL操作一般是查询,因为要通过一些必要的索引
正常的MYSQL操作:
client ——>SQL【port3306:accept MYSQL protocol-->sql paring -->open table --> make queryplans-->rowaccess -->close table-->return result】——>storage in buffer pool
通过handsocket操作:
client——>SQL【port9999:accept HS protocol --> Row Access --> return result】——>storage in pool
上面的操作流程是插件优化的关键点。

Handsocket:
1:端口:9998作为读端口   9999作为写端口
2:优劣特点:
    (1)省去SQL层开销,节约CPU
    (2)合并多个请求同时运行,减少CPU开销和运行I/O数 (NoSQL:但反应时间长,一般用于不需要反馈的环境
           下)
    (3)简单文本协议,减少流量(本机不需要考虑)(也就没有安全保障,所以账户等核心信息一般不用NoSQL)
    (4)可以同时使用MYSQL和Handersocket,两者不冲突并方便使用。(流行核心因素)
    (5)支持较大的并发连接(my.cnf中的参数handersocket_threads配置)
    (6)相对于memcache来说避免了双重缓存(memcache和mysql都有缓存机制,并需要同步数据)
    (7)CPU绑定下:读性能是mysql的3-7.5倍  写是mysql的3-5倍 ( I/O绑定下:性能提升不明显主要靠合并操
            作。)
    (8)只在innodb引擎下比较好,兼容性问题。

handlersocket安装:

下载:http://github.com/ahiguti/HandlerSocket-Plugin-for-MySQL/tarball/master

shell>解压 && 进入解压后文件夹

shell>./autogen.sh

shell>./configure --prefix=/usr/local/HandlerSocket-Plugin --with-mysql-source=/usr/src/mysql-5.1.52/ --with-mysql-bindir=/usr/bin64 --with-mysql-plugindir=/usr/lib64/mysql/plugin

(--with-mysql-source:mysql源码目录 ;--with-mysql-bindir:mysql安装目录可执行程序文件夹;--with-mysql-plugindir:mysql插件目录)

如果提示说没有找到md4目录:创建md4目录;指定的路径一定是按自己mysql安装的路径相应调整,否则很容易出现各种找不到情况;如果提示版本有问题,查看当前linux安装了什么版本,下载对应版本的源码文件。

shell>make && make install

以上安装完毕!

加载handlersocket插件:

shell>vim /etc/my.cnf

##add handlersocket plugin配置

在[mysqld]下(一定是要在mysqld下,否则配置不会生效)增加下面的默认配置:
loose_handlersocket_port = 9998
# the port number to bind to (for read requests)
loose_handlersocket_port_wr = 9999
# the port number to bind to (for write requests)
loose_handlersocket_threads = 16
# the number of worker threads (for read requests)
loose_handlersocket_threads_wr = 1
# the number of worker threads (for write requests)
open_files_limit = 65535
# to allow handlersocket accept many concurrent
# connections, make open_files_limit as large as
# possible.

shell>/etc/init.d/mysqld restart

mysql>install plugin handlersocket soname 'handlersocket.so';

mysql>show processlist;

应该显示system uers的行并status为handlersocket:mode=rd......就成功了

你可能感兴趣的:(myslq优化-中间层)