问题在php中创建自己的数据库

时间:2014-01-12 12:53:38

标签: php arrays multidimensional-array

最近我决定在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:

1 个答案:

答案 0 :(得分:0)

你对数据库查询速度的看法对我来说听起来很模糊。通常,当您描述的延迟发生在数据库与Web服务器不在同一台计算机上,而不是在同一计算中心并且通过Internet建立连接时。

通常I / O速度heirachy看起来像这样(从最快的开始)

  • 同一台机器上的Memcache
  • 本地网络中的Memcache
  • 同一台机器上的数据库
  • 本地网络中的数据库
  • 您机器的文件系统
  • 本地网络中的文件系统

所以如果你真的需要缓存一些基本的密钥=&gt;值数据并以光速检索它,将其存储在memcache中(我建议使用php memcached包)。 Memcache与你想要构建的东西相似,但它已经完成,所以你可以继续你的游戏工作。