【问题标题】:Store hundreds of versions on a server : what compression to use?在服务器上存储数百个版本:使用什么压缩?
【发布时间】:2014-09-27 06:54:40
【问题描述】:

对于我正在构建的在线文本编辑器项目,项目的保存类似于http://jsfiddle.net

  • 第一个版本是sdf23f
  • 第二个Save 指向sdf23f/1,第三个Save 指向sdf23f/2,等等。

当有人点击Save时,会调用一个PHP文件,将数据保存到服务器:

<?php if(!empty($_POST['data'])){
$data = $_POST['data'];
$fname = $_POST['id'];
$file = fopen("data/" . $fname, 'w');
fwrite($file, $data);
fclose($file);
}
?>

那么在同一个文件夹中就会有数百个版本(即数百个相似文件)。

应该在哪个阶段进行压缩以节省服务器存储空间? 什么样的压缩?在 PHP 内部,还是应该由其他东西处理压缩?

【问题讨论】:

  • 为什么不保存到数据库中呢?

标签: php serialization version-control compression versioning


【解决方案1】:

应该在哪个阶段进行压缩以节省服务器存储空间?

Erm ...在您保存文件之前。

在 PHP 内部,还是应该由其他东西来处理压缩?

如果您知道自己在做什么,我相信您可以在 PHP 中实现合适的“压缩”。但是也有现有的实用程序可以做这种事情(当然在 Linux / Unix 上......)

但我认为你真正需要知道的是使用什么样的“压缩”技术。答案是在存储文本文件的多个版本时节省空间的方法是(通常)存储连续版本之间的差异,而不是完整版本。所以你可以存储:

  • 完整的最新版本(比如版本 N)。
  • 版本 N 与版本 N - 1 的差异
  • 从版本 N -1 到版本 N - 2 的差异。
  • 等等。

然后可以压缩(在传统意义上)基本文件和差异,但如果差异文件很小,它们的压缩性不会很高。

您需要对空间做的另一件事(在典型的文件系统上)是不要存储大量单独的小文件。典型的文件系统以几千字节为单位分配磁盘空间。如果你的文件很小,你最终会浪费每个文件中最后一个磁盘块的很大一部分。这可能很重要。

处理这种情况的标准方法是使用“归档”格式(如 tar 或 zip),该格式可以在单个归档中保存多个“文件”。然后,您可以压缩存档以节省更多空间。 (虽然压缩已经压缩的文件无济于事......)


@Rasclatt 评论道:

为什么不保存到数据库中呢?

嗯:

  • 使用数据库并不能直接解决空间使用问题本身。 (除非数据库支持压缩。)

  • 然后您必须通过数据库访问文件……这通常比直接从文件系统读取文件要慢。

【讨论】:

    猜你喜欢
    • 2012-06-07
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 2011-07-07
    • 1970-01-01
    • 2014-01-13
    • 1970-01-01
    相关资源
    最近更新 更多