petrknap/php-splitfilesystem

PHP 分割文件系统

v1.0.0-rc1 2019-04-14 07:33 UTC

This package is auto-updated.

Last update: 2024-09-25 19:39:43 UTC


README

关于已解决的问题

我需要使用一个地方来存储大约 60,000 个文件,平均大小为 30kb 的文件(这是一个要求,不能简单地将其拆分为具有较少文件数量的子目录)。

文件将随机访问,但一旦创建,将不会有相同的文件系统写入。我目前使用 Ext3,但发现它非常慢。有任何建议吗?

-- Filesystem large number of files in a single directory - bugmenot77, voretaq7

这种文件存储简单地解决了这个问题——它 在文件系统和应用程序之间创建虚拟层。每个路径都转换为由包含少量子目录的多个目录组成的路径。

如果您希望在单个目录中存储 1,000,000 个文件,此文件存储将转换路径并将它们存储在树结构中。每个目录只包含少量目录和文件(取决于配置)。

优点

  • 可以在单个目录中存储大量文件
  • 自然保护存储外的文件
  • 每个用户都可以有独立的隔离文件存储
  • 完全兼容,并基于 League\Flysystem

缺点

  • 真实的文件结构对用户不友好

php-splitfilesystem 的使用方法

标准使用方法

<?php

use League\Flysystem\Adapter\Local;
use League\Flysystem\Config;
use PetrKnap\Php\SplitFilesystem\SplitFilesystem;

$optionalConfig = new Config([
    SplitFilesystem::CONFIG_HASH_PART_LENGTH_FOR_DIRECTORIES => 3, // up to 1024 sub-nodes
    SplitFilesystem::CONFIG_HASH_PART_LENGTH_FOR_FILES => 2, // up to 256 sub-nodes
    SplitFilesystem::CONFIG_HASH_PARTS_FOR_DIRECTORIES => 1, // 1-level sub-tree
    SplitFilesystem::CONFIG_HASH_PARTS_FOR_FILES => 3, // 3-level sub-tree
]);

$fileSystem = new SplitFilesystem(new Local(__DIR__ . '/temp'), $optionalConfig);

$fileSystem->write('file.txt', null);
$fileSystem->update('file.txt', 'Hello World!');

printf('%s', $fileSystem->read('file.txt'));

foreach ($fileSystem->listContents() as $metadata) {
    $fileSystem->delete($metadata['path']);
}

如何安装

运行 composer require petrknap/php-splitfilesystem 或将此 JSON 代码手动合并到您的项目 composer.json 文件中,然后运行 composer install。您可以使用 已发布版本之一 代替 dev-master

{
    "require": {
        "petrknap/php-splitfilesystem": "dev-master"
    }
}

或者手动通过 git clone https://github.com/petrknap/php-splitfilesystem.git 克隆此存储库,或者下载 此存储库作为 ZIP 并将其文件提取到您的项目中。