php - 处理高负载文件 I/O 的最佳实践是什么?

标签 php multithreading file-io simultaneous

对于同时负载较高且我需要处理文件 I/O 而不会太卡在文件锁上的 LAMP 服务器,您推荐的最佳做法是什么?

我的意思是,假设我想要一个包含大量姓名和电子邮件地址的 SUBSCRIBERS.CSV 文件。但我希望人们能够填写表格取消订阅。如果给定电子邮件地址存在匹配行,取消订阅操作将滚动浏览该文件以删除匹配行。这在 PHP 中似乎是一项简单的任务,但是当您有大约 10 个人试图同时取消订阅并添加 10 个新订阅者时会发生什么?这就是我认为 PHP 可能会遇到麻烦并且可能由于文件锁定而产生错误的地方,除非 Linux 或 PHP 比我想象的更强大。

请注意,我的客户需要 CSV 文件,而不是数据库表。在数据库表中,这不是问题,但作为文件 I/O,我可能会遇到潜在问题,对吧?

(顺便说一句,为了防止身份盗用,我使用了一个 .htaccess 技巧,这样人们就无法通过猜测其名称从 Web 下载 CSV——它只能通过我的 PHP 脚本或 FTP 访问。)

最佳答案

如果要求客户端与 CSV 文件进行交互,则无需实际使用 CSV 文件作为数据存储。相反,使用数据库,在数据库中完成所有工作,然后让 PHP 按需生成 CSV 文件。

因此,如果客户端需要访问 http://example.com/SUBSCRIBERS.CSV , 只需让 PHP 处理 SUBSCRIBERS.CSV 并使用类似的东西:

header("Content-type: text/csv");
$data = get_subscriber_data();
foreach ($data as $row) {
  // $row is an array of columns
  print implode(',', $row);
}

关于php - 处理高负载文件 I/O 的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4536249/

相关文章:

C - 无法获取文本文件中的行数?还有其他方式获取吗?

php - 使用 PHP 和 MySQL 在 sql 查询中获取语法错误

php - elasticsearch-php创建索引返回\BadRequest400Exception

javascript - 来自窗口模式的 PHP POST 数组

php - MySQL 查询缓存与自定义缓存功能

java - 在 Map 中,如果我们使用现有键进行修改,我们不会得到 ConcurrentModificationException

c - Malloc 没有失败,但系统内存不足

ios - 我们可以允许从两个线程同时操作 NSMutableArray 的不同 "indexes"

file - 使用 r+ 模式打开文件时如何删除文件内容?

android - Android C++ fopen fwrite 和 fclose 如何工作?