- 浏览: 68840 次
- 性别:
- 来自: 南京
文章分类
最新评论
早先问过BleakWind,他认为,给别人做的话MySQL内存表做会话比较好一些,因为MySQL内存表做Session更容易维护(可以制作安装脚本)。这个周末,我进行了一些测试,测试MySQL MyISAM表做会话(对时间给不给索引)、内存表做会话、MemCache做会话的效率比较。
定义会话Session类:
定义会话处理器接口(Session_Handler_Interface):
实现MySQL内存表Session处理器:
实现MemCache会话处理器:
MySQL内存表测试程序:
MemCache会话测试代码:
MySQL会话表如下:
CREATE TABLE `session` (
`id` char(32) COLLATE utf8_unicode_ci NOT NULL,
`name` varchar(20) COLLATE utf8_unicode_ci NOT NULL,
`ip` varchar(15) COLLATE utf8_unicode_ci NOT NULL,
`time` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MEMORY DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
测试结果:
MemCache:
======================================================================================
Concurrency Level: 30
Time taken for tests: 18.234375 seconds
Complete requests: 10000
Failed requests: 0
Write errors: 0
Total transferred: 2774781 bytes
HTML transferred: 280000 bytes
Requests per second: 548.41 [#/sec] (mean)
Time per request: 54.703 [ms] (mean)
Time per request: 1.823 [ms] (mean, across all concurrent requests)
Transfer rate: 148.57 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 1.9 0 31
Processing: 0 53 12.1 46 328
Waiting: 0 52 11.9 46 328
Total: 0 53 12.1 46 328
Percentage of the requests served within a certain time (ms)
50% 46
66% 62
75% 62
80% 62
90% 62
95% 62
98% 62
99% 78
100% 328 (longest request)
MySQL内存表:
=================================================================================
Concurrency Level: 30
Time taken for tests: 20.375000 seconds
Complete requests: 10000
Failed requests: 4694
(Connect: 0, Length: 4694, Exceptions: 0)
Write errors: 0
Total transferred: 3118440 bytes
HTML transferred: 623048 bytes
Requests per second: 490.80 [#/sec] (mean)
Time per request: 61.125 [ms] (mean)
Time per request: 2.038 [ms] (mean, across all concurrent requests)
Transfer rate: 149.45 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 1.9 0 31
Processing: 0 60 7.6 62 125
Waiting: 0 59 7.6 62 125
Total: 0 60 7.5 62 125
Percentage of the requests served within a certain time (ms)
50% 62
66% 62
75% 62
80% 62
90% 62
95% 62
98% 78
99% 78
100% 125 (longest request)
其他测试:
将MySQL实现的数据库引擎改为 MyISAM(依然为 并发 30 测试 10000 次) 结果为:
Requests per second: 440.17 [#/sec] (mean)
Percentage of the requests served within a certain time (ms)
50% 62
66% 62
75% 78
80% 78
90% 78
95% 78
98% 78
99% 78
100% 640 (longest request)
为MyISAM表的 time 列增加索引(因为 会话表 读写次数几乎相等,因此应该效果不明显),结果为:
Requests per second: 441.08 [#/sec] (mean)
Percentage of the requests served within a certain time (ms)
50% 62
66% 62
75% 78
80% 78
90% 78
95% 78
98% 109
99% 109
100% 156 (longest request)
=================================================================================
结论:
MemCache做会话效率最高,也最灵活,但目前尝不支持查看谁在线等功能,附加的,只能自己增加一个数组记录在线用户、以及最后活跃时间并实现gc等。
MySQL内存表做会话效率也相当的高,另外一个有点是,MySQL内存表似乎更稳定,longest request (125ms)明显的短于 MemCache的(328ms)。不过缺点是,存储的字段数以及字段长度受限。
MySQL MyISAM表做会话在这里居然也达到了440的rps,真不简单。不过您要是等半个小时在测试一次,您就会明白MyISAM表的缺点了,页面几乎崩溃。MyISAM表的缺点是,一旦其中有较多的碎片,这个数据库几乎都不可用了,您注释掉 gc 的代码在这里貌似可以获得更好的效率表现(^_^、当然也可以定时的Optimizer,概率触发或者Cron定时启动也不错)
MyISAM表对time列增加索引对每秒完成的请求数没什么影响,不过有一点需要注意的是,增加索引后,每次完成 request的时间更均匀了,longest request从640ms跌到了156ms。为time列增加索引有助于让完成请求的时间变均匀。
测试平台:
Acer Aspire 4520G:
CPU:AMD Athlon 64 * 2 TK-55
RAM: IG
OS: Windows XP sp2
Web Server: Apache 2.26
PHP: PHP5.25
转载自:http://www.9958.pw/post/session_method
发表评论
-
项目管理之如何控制项目进度和质量
2016-07-16 22:37 606控制项目进度和质量首先在整体上要有一个合理清晰的流程,并且在整 ... -
15 个非常棒的 CSS3 效果教程
2016-07-03 20:42 5881. 创建一个漂亮的图标 这个教程将教你如何用纯 C ... -
前20名的不安全密码(需要避免)
2016-07-01 21:41 514下图举例说明了一些人们作出选择密码时最常用的错误,以及如何使你 ... -
js实现图片放大缩小后进行的复杂排序
2016-06-30 21:57 584首先,我们来讲下需求: 1.图片分为大小和小图,大图占四个小 ... -
史上最全ajax(原生JS,javascript版,非jquery)详细注释!
2016-06-29 22:31 810史上最全ajax详细注释!(原生JS,javascript版, ... -
php千万级pv架构经验分享
2016-06-28 22:04 1294转载自:http://www.9958.pw/post/ph ... -
ecshop 时间问题请注意 /data/config.php
2016-06-27 22:43 866ecshop 处理时间,绕来绕去, 后台的时区设置, 并非以 ... -
目前比较流行的二维码的生成
2016-06-26 23:55 584最近比较流行二维码,自己百度了一下发现有一个很不错的实现方法使 ... -
如何阻止移动设备(手机,pad)浏览器双击放大网页?
2016-06-24 22:29 1214现在的手机或平板电脑等移动设备上的浏览器默认都有双击放大的设置 ... -
PHP解决Xss跨域攻击以及sql注入等危险字符串方案类库
2016-06-19 21:45 778由于该模块在项目中的要求是 不能提示任何信息,也不作断点操作, ... -
网站敏感骂人词库及算法(附6仟个敏感词)
2016-06-16 22:07 5885原文:「我今天开着张三丰田去上班 」 strtr:「我今天开 ... -
jQuery制作元素在屏幕中水平垂直居中效果
2016-06-14 21:56 599jQuery.fn.center = function () ... -
纯CSS画的基本图形(矩形、圆形、三角形、多边形、爱心、八卦等)
2016-06-11 21:32 9761、正方形 CSS代码如下: #square { widt ... -
分享一个JQuery写的点击上下滚动的小例子
2016-06-08 22:00 502效果图 演示地址 源码下载 <!--more--> ... -
精美的国外扁平化网页设计作品
2016-06-05 16:02 598Who Wanna <!--more--> ... -
提交您的博客到各大网站
2016-06-03 21:04 381各大搜索引擎网站登录入口: Google收录入口:http:/ ... -
推荐7个 CSS3 制作的创意下拉菜单效果
2016-06-02 22:15 4021. 使用 jQuery 和 CSS3 制作向下滑动的导航菜单 ... -
Dev Http Client(Chrome的HTTP插件)
2016-05-31 22:34 755Dev Http Client(Chrome的HTTP插件) ... -
好的用户界面-界面设计的一些技巧
2016-05-29 16:24 4021 尽量使用单列而不是 ... -
项目组制定的一份页面优化指南
2016-05-27 21:40 3641.文档声明 文档声明必须置于网页的HTML部分的最开始,标签 ...
相关推荐
### MySQL的MyISAM表类型解决并发读写问题 在MySQL数据库系统中,MyISAM是一种非常常用的存储引擎。它以其高效性和简单的结构而在许多场景下得到广泛应用,尤其是在那些读取操作远多于写入操作的应用场景中。然而,...
MyISAM在读操作占主导的情况下是很高效的,但是一旦出现大量的读写并发,MyISAM的效率就会直线下降。 MyISAM和InnoDB的数据存储方式也有显著不同。在MyISAM中,新数据会被附加到数据文件的结尾,而InnoDB中,数据...
此外,由于 MyISAM 使用的是表级锁定策略,因此在进行大批量数据导入时,其效率往往高于 InnoDB。 综上所述,InnoDB 和 MyISAM 各自适用于不同的应用场景。InnoDB 更适合于需要事务支持和高并发处理的应用场合,而 ...
一:MySQL中MyISAM表损坏原因总结: 1、 服务器突然断电导致数据文件损坏;强制关机,没有先关闭mysql 服务;mysqld 进程在写表时被杀掉。 2、 磁盘损坏。 3、 服务器死机。 4、 mysql 本身的bug 。 二:MySQL中MyISAM...
默认MyISAM的表会在磁盘中产生3个文件:.frm(表结构文件)、.MYD(数据文件)、.MYI(索引文件) 可以在创建的时候指定数据文件和索引文件的存储位置,只有MyISAM表支持: DATA DIRECTORY [=] 数据保存的绝对路径 ...
MySQL8.0内存相关参数是优化数据库性能的关键因素,它们决定了数据库如何管理和使用内存资源,以提高查询效率和系统稳定性。下面将详细解释几个重要的内存参数及其作用。 1. **innodb_buffer_pool_size**: 这是...
MySQL插件禁止创建MYISAM表。 用法 首先,编译插件并安装到插件目录 cp -r src /path/to/mysql-src/plugin/disable_myisam cd /path/to/mysql-src cmake . -DBUILD_CONFIG=mysql_release cd plugin/disable_myisam...
### MySQL临时表与派生表详解 #### 一、MySQL临时表 **1.1 临时表概述** MySQL中的临时表是一种特殊的表类型,主要用于存储临时数据或中间结果集,适用于那些需要多次查询同一结果集的场景。根据存储位置的不同,...
在进行MySQL内存分析时,首先需要了解MySQL的内存结构和工作机制,这对于优化MySQL的性能至关重要。内存分配问题在容量规划阶段常常被提出,人们会疑惑应该为MySQL以及整个系统分配多少内存。通常互联网上有许多不...
myisampack是一个用于创建压缩MYISAM表的命令行工具,它会删除索引文件并将其数据与索引合并到单个文件中,从而实现压缩。然而,压缩后的表变为只读,无法进行写操作,因此在压缩后通常需要使用myisamchk来恢复可...
通过合理的表结构设计、索引优化、查询优化以及内存和存储管理,我们可以有效地应对大数据量带来的挑战,实现数据库的高效运行。在实践中,我们需要根据具体业务需求和资源限制,灵活应用这些策略和规范,以达到最优...
但通过配置`myisam-recover`选项,可以实现MyISAM表的自动修复,从而提高系统的可靠性。 `myisam-recover`选项是在MySQL的配置文件`my.cnf`中添加的,用于设定在MySQL服务启动时对MyISAM表进行检查和恢复的策略。...
【MySQL 表分区详解】 ...综上所述,MySQL表分区是大数据场景下的有力工具,通过合理设计和使用,可以显著提升数据库的性能和管理效率。在实际应用中,应结合业务需求和查询模式选择合适的分区策略。
该公式覆盖了MySQL运行时的主要内存消耗部分,包括但不限于缓存、临时表空间以及连接相关的内存开销等。 #### 三、关键参数解析 1. **KeyBufferSize**:表示MyISAM表索引的缓存大小。 2. **QueryCacheSize**:查询...
数据库报错: SQLSTATE[HY000]: General error: 144 Table './db_jiangzi_video/cmf_jiangzi_items' is marked as crashed and last (automatic?) repair failed MySQL数据库表修复 MyISAM
MySQL数据库系统提供了多种存储引擎,其中最常用的两种是MyISAM和InnoDB。它们各自具有独特的特性和适用场景,理解二者的性能差异对于优化数据库设计至关重要。 MyISAM引擎是MySQL早期的默认存储引擎,以其高速度和...
本文实例讲述了mysql更改引擎(InnoDB,MyISAM)的方法,分享给大家供大家参考。具体实现方法如下: mysql默认的数据库引擎是MyISAM,不支持事务和外键,也可使用支持事务和外键的InnoDB。 查看当前数据库的所支持的...