2017 © Pedro Peláez
 

library php-splitfilesystem

Split Filesystem for PHP

image

petrknap/php-splitfilesystem

Split Filesystem for PHP

  • Tuesday, December 5, 2017
  • by petrknap
  • Repository
  • 1 Watchers
  • 0 Stars
  • 1 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 1 Versions
  • 0 % Grown

The README.md

Split Filesystem for PHP

About resolved issue

I need to use something where around 60,000 files with average size of 30kb are stored in a single directory (this is a requirement so can't simply break into sub-directories with smaller number of files)., (*1)

The files will be accessed randomly, but once created there will be no writes to the same filesystem. I'm currently using Ext3 but finding it very slow. Any suggestions?, (*2)

-- Filesystem large number of files in a single directory - bugmenot77, voretaq7, (*3)

This file storage solves this issue simply - it creates virtual layer between file system and application. Every path is converted into path which is composed from many directories which contains only small amount of sub-directories., (*4)

If you wish to store 1 000 000 files in single directory, this file storage converts paths and stores them in tree-structure. Every directory contains only small amount of directories and files (depends on configuration)., (*5)

Advantages

  • Can store a huge amount of files in single directory
  • Naturally protects files outside the storage
  • Every user can has separated and isolated file storage
  • Fully compatible and based on League\Flysystem

Disadvantages

  • Real file structure is not user-friendly

Usage of php-splitfilesystem

Standard usage

<?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']);
}

How to install

Run composer require petrknap/php-splitfilesystem or merge this JSON code with your project composer.json file manually and run composer install. Instead of dev-master you can use one of released versions., (*6)

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

Or manually clone this repository via git clone https://github.com/petrknap/php-splitfilesystem.git or download this repository as ZIP and extract files into your project., (*7)

The Versions

05/12 2017

dev-master

9999999-dev https://petrknap.github.io/docs/php-splitfilesystem.html

Split Filesystem for PHP

  Sources   Download

MIT

The Requires

 

The Development Requires