最近我决定在php创建自己的数据库。原因是因为我在线制作迷你游戏,我需要尽可能快地发送一些信息(我知道这不是最好的方法)因为我使用网页。),所以我注意到如果我查询一个网页(有php文件),然后查询数据库,我需要1秒到1.3秒,这对我来说很重要,所以如果我只是查询一个网页,它通常需要我0.5秒才能达到我的目的。
所以我需要做的是在文件中保存一个多数组' db.txt'并且进行一些检查,例如,如果存在id等于1的值,它应该只更改id等于1的数组,如果没有id值等于1的α值,那么添加它然后下次修改。
这是我到目前为止所做的:
<?php
$id = $_REQUEST['id'];
$positionX = $_REQUEST['positionX'];
$positionY = $_REQUEST['positionY'];
$infoDB = fopen("db.txt", "a+");
$conteudo = fread($infoDB, 4096);
$obj = json_decode($conteudo, true);
if($conteudo == ''){
$table = json_encode(array(
array('id' => $id, 'positionX' => "$positionX", 'positionY' => "$positionY", 'hp' => 100, 'hpmax' =>100, 'hit' => 0, 'mp' => 0, 'mpmax' => 0)
));
$infoDB = fopen("db.txt", "a+t");
fwrite($infoDB,$table);
echo 'Writing first time ...';
}else{
$infoDB = fopen("db.txt", "a+");
$conteudo = fread($infoDB, 4096);
$array = json_decode($conteudo, true);
array_walk($array, "busca", $id);
}
function busca($valor, $chave, $it) {
if($valor['id']==$it){
$valor['positionX'] = $GLOBALS["positionX"];
$valor['positionY'] = $GLOBALS["positionY"];
$table = json_encode(array($valor));
$infoDB = fopen("db.txt", "w+");
fwrite($infoDB,$table);
echo $valor['id']." / ".$valor['positionX']." [".$valor['positionY']."]";
echo 'rewriting...';
}else{
$id = $GLOBALS["id"];
$positionX = $GLOBALS["positionX"];
$positionY = $GLOBALS["positionY"];
$arr = array('id' => $id, 'positionX' => "$positionX", 'positionY' => "$positionY", 'hp' => 100, 'hpmax' =>100, 'hit' => 0, 'mp' => 0, 'mpmax' => 0);
$valor[] = $arr;
$table = json_encode(array($valor));
$infoDB = fopen("db.txt", "w+");
fwrite($infoDB,$table);
echo 'Adding One more. '.$valor['id']." e ".$id;
}
return;
}
fclose($infoDB);
?>
我使用json_encode将数组保存在database.txt
中这就是我相信我的脚本的工作方式。
首先它获取id,positionX和positionY,我打开db.txt 然后我将它解码为数组,我检查db($ conteudo)是否为空 或者不是,如果是这样它写第一个数组如果不是它应该检查是否存在 是一个id等于a的值($ id = $ _REQUEST [&#39; id&#39;];)但是有一个 在某个地方的bug,它只是检查第一个值/数组 保存在db.txt上我使用了array_walk来尝试这样做但是就是这样 我第一次使用array_walk,所以我不知道我是否正在制作它 对还是错。如果有更好的方法来做我想做的事情 请大家帮帮我!! d:
答案 0 :(得分:0)
你对数据库查询速度的看法对我来说听起来很模糊。通常,当您描述的延迟发生在数据库与Web服务器不在同一台计算机上,而不是在同一计算中心并且通过Internet建立连接时。
通常I / O速度heirachy看起来像这样(从最快的开始)
所以如果你真的需要缓存一些基本的密钥=&gt;值数据并以光速检索它,将其存储在memcache中(我建议使用php memcached包)。 Memcache与你想要构建的东西相似,但它已经完成,所以你可以继续你的游戏工作。