petrknap / php-splitfilesystem
PHP 分割文件系统
v1.0.0-rc1
2019-04-14 07:33 UTC
Requires
- php: >=5.6
- league/flysystem: ^1.0
- nunzion/php-expect: ^1.1
Requires (Dev)
- phpunit/phpunit: ^4.8
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 并将其文件提取到您的项目中。