有没有办法在mysql中有两个单独的引擎?

时间:2012-11-02 19:20:58

标签: php mysql

another question相关,没有人回答。

another question中我曾经问过一些人帮助过我,但现在我陷入了另一种境地。

好了我现在想知道在某些表格中我们使用两个单独的引擎,如2列uidusername有myisam引擎和lastlogin这是一个时间戳正在使用的内存引擎。

因为我认为不可能我尝试在数据库中创建一个表onlineusers(MEMORY ENGINE),其中两列是uid而另一列是lastlogin然后当用户想要登录时我检查像这样的数据库,如果用户不存在则插入

$myquery = mysql_query('SELECT COUNT(1) FROM `onlineusers` WHERE uid="'. $row['uid'] . '"');

if(mysql_result($myquery,0) == 0){
    $data['uid'] = $row['uid'];             
    $db->insert("onlineusers",$data);
}else{
    updateStatus($row['uid']);
}

和更新状态功能就像这样

function updateStatus($uid){
    $db = DATABASE::obtain();
    $query = mysql_query("UPDATE `onlineusers` set `lastvisit`=now() WHERE uid='".$db->escape($uid)."'");
}

但是当我想到这一点时,当我们重新启动我们的服务器时我就知道了,那么在线用户表将是空的,并且对于已设置cookie的用户会发生什么?

然后我必须更改更新功能以使用两个单独的查询第一个查询检查是否uid存在于onlineuses然后如果不是我们将插入它或如果存在我们必须更新时间戳..

现在我有另一个问题要问。 使用此方法检查是否存在更快,然后使用具有内存引擎的updatestatus函数更新它...或者只是在我的users表中创建一些时间戳cloumn并在每个页面上更新它检查有myisam引擎吗?

1 个答案:

答案 0 :(得分:0)

你想要做什么,即在同一张桌子上使用两个独立的引擎听起来不太可能。单个引擎控制单个表作为MySQL的最基本级别。有可能解决这个问题,但这不是明智之举。你可以编辑源代码,但那会很疯狂。如果您担心性能,那么您可以将表拆分为多个表,以便在所需的表上使用所需的引擎。否则你可以使用缓存框架,比如mem cache(我推荐),它可以通过缓存提高性能,但是你需要它。内存缓存是一个经过良好测试的PHP工具,听起来就像你需要的那样。祝你好运。