我的问题是,使用
fwrite()
将额外的数据附加到PHP文件中以存储相同的信息,是否比创建SQL连接来检索聊天的新帖子更有效?我知道如何有效地完成这项工作,我只是试图弄清楚哪种方式更有效。我也稍微研究了一下SQLite;它是否比使用MySQL数据库更好?
fwrite()
将额外的数据附加到PHP文件中以存储相同的信息,是否比创建SQL连接来检索聊天的新帖子更有效?我知道如何有效地完成这项工作,我只是试图弄清楚哪种方式更有效。数据库管理系统(DBMS)存在的原因是存储和访问数据并不像看起来那么简单。
将数据存储在文件中会导致访问并发问题。当文件变得越来越大时,你将不得不面对重要的内存使用或编写很多代码来加载你所需的内容。而且进行基本操作如过滤(SQL WHERE
子句)或更新行也会非常困难。顺便说一下,改变数据结构很容易出错。换句话说:你将不得不编写很多代码并面对很多错误。
我认为不使用任何类型的DBMS就是重新发明轮子。然而选择正确的DBMS非常重要。
chat_243.json
)并另存为已格式化的JSON,然后如果一个请求进入带有lastMessageReceived=243
的PHP,则只提供整个文件即可。由于这将创建多个文件,因此您需要一个函数来清理早于(m)分钟的文件,但这对服务器也是轻微的工作。$cacheFile = 'cache/chat_'.$_GET['last'].'.json';
if (file_exists($cacheFile) && filemtime($cacheFile) + QUERY_REFRESH_RATE > time())
{
readfile($cacheFile);
} else {
require_once("../../../../wp-load.php");
$timestampMin = gmdate("Y-m-d H:i:s", (time() - 7200));
$sql= "/*qc=on*/" . "SELECT * FROM ". DB_TABLE ."chat_posts WHERE ID > ". $_GET['last'] . " AND timestamp > '".$timestampMin."' ORDER BY ID;";
$posts = $wpdb->get_results($sql);
$json = json_encode($posts);
echo $json;
file_put_contents($cacheFile,$json);
}
我建议使用MySQL,因为它比一个简单的文件更适合于从Web应用程序进行多次访问。
首先,请使用持久连接。
在使用它时,如果您还没有使用PDO,请使用PDO。(PDO用于持久连接的选项是PDO :: ATTR_PERSISTENT => true)
注:PHP的默认设置是仅模拟准备好的语句。您需要将PDO :: ATTR_EMULATE_PREPARES设置为0以获得真正的准备好的语句。(http://bugs.php.net/bug.php?id=54638)
另外:在5.1.17之前的版本中,准备好的语句不会使用MySQL缓存,并且在5.1.21之前,不会缓存变量准备好的语句,因此请确保您有最新版本的MySQL。
PDO提供了比潜在性能提升更多的功能。如果您还没有了解,请查看这里的更多信息:http://ca2.php.net/manual/en/book.pdo.php
我曾经也有类似的考虑,并编写了这个通用、简单且高性能的解决方案,你可能会喜欢 Rocket-store
只需包含一个文件,就可以立即开始插入记录。
它有三个主要方法:put、get和delete(以及一些特殊的方法和选项设置)
示例:
// collection/table = "cars", key = "Mercedes"
$rs->post("cars", "Mercedes-Benz GT R", ["owner" => "Lisa Simpson",reg: "N3RD"]);
// Get all records from "cars" collection
$result = $rs->get("cars", "Mercedes*");
// Delete records in collection "cars" where keys match "*cede*"
$rs->delete("cars", ""*cede*"");
Rocket-store 依赖于底层文件系统缓存,以优化速度,并可以处理数百万条记录。
在插入方面,它比关系型数据库快100倍以上。通常为每秒40,000次插入。您不需要安装任何东西,只需包含一个文件即可。
您将获得简单的序列、自动增量和其他一些小便利,但仅限于此。没有花哨的功能。
每当我需要一个简单的存储解决方案时,我非常喜欢它,但我也非常有偏见 ;)