mysql 内存表保存php session会话 大数据的问题

callmez 发布于 2012/07/08 17:15
阅读 1K+
收藏 0
项目要使用到session保存用户的会话信息,
设计是把会话数据放入mysql内存表中性能可以提升不少.
但是碰到的问题是,内存表如果来保寸大数据的会话值,
因为内存表不支持text,blog类型,  用varchar的话5.0.35以上版本可以支持65535的数据量,
不知道这样设计可以不可以,内存会不会消耗很快,性能会下降.
所以想请教下各位, mysql 内存表来保存session的方案,

顺便也看了下discuz!x的session方案,  他保存的只是个别几个需要的会话值,那么用户其他的会话值要怎么保存呢,就没有深入理解.
求牛人支招,  目前只探讨的是mysql, 其他方案就不多讨论了
加载中
0
deleted
deleted
用innodb吧。 如果我记得不错的话, mysql内存表没变长概念, 你要弄成65535等于每列都要65k,再加上其他列,对齐,还有索引....占用很恐怖的....
大东哥
大东哥
没错, 是这样的.
mark35
mark35
so就一废材
0
mark35
mark35
登录会话就是几个属性而已,楼主怎么会出来blob这种东东呢
悟庭
悟庭
+1
0
十一文
十一文

首先,会话本来就是只是保存状态。是状态,不是数据。session本就应该尽可能的小。

你可以把那个大数据的id保存在session中,到时候再根据id查即可,如果觉得性能不好,那么用cache。

 

估计你用mysql内存表是为了解决多服务器的时候session共享。一般没有用mysql的内存表的方式弄。一般的解决方式是memcache 或者种个cookies (可参看sso的方案)。

 

如果说用mysql我建议干脆别用内存表,直接写数据库就是,数据库本来就会把常用查询cache。

0
c
callmez

引用来自“十一文”的答案

首先,会话本来就是只是保存状态。是状态,不是数据。session本就应该尽可能的小。

你可以把那个大数据的id保存在session中,到时候再根据id查即可,如果觉得性能不好,那么用cache。

 

估计你用mysql内存表是为了解决多服务器的时候session共享。一般没有用mysql的内存表的方式弄。一般的解决方式是memcache 或者种个cookies (可参看sso的方案)。

 

如果说用mysql我建议干脆别用内存表,直接写数据库就是,数据库本来就会把常用查询cache。

很好,谢谢, 只是想session 调优下,  就是因为怕数据频繁拖累mysql,  而且myisam表在数据频繁使用下碎片也是很麻烦的东西, 所以想尽量使用到内存中,  memcache的话也会考虑.只是mysql内存的话不保存大数据应该还是很稳定的

0
c
callmez

引用来自“勇者天空”的答案

用innodb吧。 如果我记得不错的话, mysql内存表没变长概念, 你要弄成65535等于每列都要65k,再加上其他列,对齐,还有索引....占用很恐怖的....
恩,  目前测试的是  myql 内存和 myisam,memcache中, 最稳定的是内存表,  myisam碎片有点困扰, memcache最快,但是不能记录在线数,
johngcn
johngcn
请考虑使用Memcache::getStats获得在线人数,速度也相当快。
0
龙鸟
龙鸟
CREATE TABLE 
...
ENGINE = MEMORY; 

不过还是建议楼主用memcached等kvdb
返回顶部
顶部