petrknap / php-filestorage
v1.1.2
2016-06-27 14:53 UTC
Requires
- php: >=5.5
- league/flysystem: ^1.0
- nunzion/php-expect: ^1.1
- petrknap/php-migrationtool: ^1.0
Requires (Dev)
- petrknap/php-profiler: ^0.2.0
- phpunit/phpunit: 4.*
This package is not auto-updated.
Last update: 2022-02-01 12:58:11 UTC
README
关于已解决的问题
我需要使用一个可以存储大约60,000个文件,平均大小为30kb的单个目录中的解决方案(这是一个要求,所以不能简单地将它们拆分成包含较少文件数量的子目录)。
文件将被随机访问,但一旦创建,将不会有对同一文件系统的写入操作。我目前正在使用Ext3,但发现它非常慢。有什么建议吗?
-- Filesystem large number of files in a single directory - bugmenot77, voretaq7
这个文件存储简单解决了这个问题 - 它 在文件系统和应用程序之间创建了一个虚拟层。每个路径都被转换为由许多只包含少量子目录的目录组成的路径。
如果您希望在一个目录中存储1,000,000个文件,这个文件存储将转换路径并将它们存储在巨大的树结构中。每个目录(不包括叶子)最多包含256个子目录。叶子目录只包含文件。
优点
- 可以在单个目录中存储大量文件
- 可以使用完全本地化的文件路径(例如:
/シックス.log
) - 自然保护存储之外的文件
- 每个用户都可以有独立和隔离的文件存储
- 完全兼容,基于 League\Flysystem
缺点
- 实际的文件结构不直观
- 不能有效地按任何键对文件进行排序(没有DBMS)
php-filestorage 使用方法
标准使用
<?php use League\Flysystem\Adapter\Local as LocalAdapter; use PetrKnap\Php\FileStorage\FileSystem; use PetrKnap\Php\FileStorage\Plugin\SQLiteIndexPlugin; $fileSystem = new FileSystem(new LocalAdapter(__DIR__ . "/temp")); SQLiteIndexPlugin::register($fileSystem, __DIR__ . "/temp/index.sqlite"); // optional $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-filestorage
或手动将此JSON代码合并到您的项目 composer.json
文件中,然后运行 composer install
。您可以使用 已发布的版本之一 而不是 dev-master
。
{ "require": { "petrknap/php-filestorage": "dev-master" } }
或者通过 git clone https://github.com/petrknap/php-filestorage.git
手动克隆此存储库,或者下载 此存储库作为ZIP文件,并将文件提取到您的项目中。