fin/user-backup-lib
Composer 安装命令:
composer require fin/user-backup-lib
包简介
Библиотека PHP для резервного копирования пользовательских данных из нескольких баз данных.
README 文档
README
Библиотека для резервного копирования пользовательских данных из нескольких баз данных с потоковой записью, чанковым шифрованием и опциональным удалением исходных данных.
Документация:
Возможности
- Потоковое чтение данных из БД без загрузки всего набора в память.
- Потоковая запись backup JSON в файл.
- Чанковое шифрование больших backup-файлов.
- Потоковое чтение backup-файлов через
streamBackupData(). - Объектный сценарий создания backup через
UserBackupCreateOptions. - Ручной сценарий создания backup-сервиса.
- Контейнерный сценарий через factory.
- Объектный сценарий очистки через
UserDataScope. - Очистка пользовательских данных после backup.
Важные границы
- Пакет ориентирован в первую очередь на MySQL-подобный сценарий.
- Generic restore внутри пакета сейчас не реализован.
- Raw rows таблиц остаются массивами, потому что схема таблиц динамическая.
- Runtime-параметры backup use case не должны резолвиться напрямую из контейнера без явного scope.
Установка
composer require fin/user-backup-lib
Packagist:
Быстрый старт
Ручной сценарий
use App\Services\UserBackupService; use App\ValueObjects\UserBackupCreateOptions; $options = UserBackupCreateOptions::fromLegacy( userId: 42, accountIds: [101, 102], activeIds: [501], ignoredTables: ['temp_logs'], connections: ['mysql', 'replica'], ); $backup = UserBackupService::createFromOptions($options);
Legacy-совместимый вариант:
use App\Services\UserBackupService; $backup = UserBackupService::create( userId: 42, accountIds: [101, 102], activeIds: [501], ignoredTables: ['temp_logs'], connections: ['mysql', 'replica'], ); $backup->fetchAllUserData(); $path = $backup->saveBackupToFile('/tmp/backup_42.json'); // вернется /tmp/backup_42.json.enc
Контейнерный сценарий
use App\Contracts\UserBackupServiceFactoryInterface; use App\ValueObjects\UserDataScope; $factory = app(UserBackupServiceFactoryInterface::class); $backup = $factory->make(new UserDataScope( userId: 42, accountIds: [101, 102], activeIds: [501], ignoredTables: ['temp_logs'], )); $backup->fetchAllUserData(); $path = $backup->saveBackupToFile(storage_path('app/backups/user-42.json'));
Legacy-совместимый вариант:
$backup = $factory->makeForUser( userId: 42, accountIds: [101, 102], activeIds: [501], ignoredTables: ['temp_logs'], );
Очистка данных
use App\Contracts\UserDataDeletionServiceInterface; use App\ValueObjects\UserDataScope; $cleaner = app(UserDataDeletionServiceInterface::class); $cleaner->deleteScope(new UserDataScope( userId: 42, accountIds: [101, 102], activeIds: [501], ignoredTables: ['temp_logs'], ));
Legacy-совместимый вариант:
$cleaner->deleteUserData( userId: 42, accountIds: [101, 102], activeIds: [501], ignoredTables: ['temp_logs'], );
Чтение backup
Полная расшифровка в массив
use App\Services\FileStorageService; $data = FileStorageService::decryptFile('/tmp/backup_42.json.enc');
Потоковое чтение
use App\Services\FileStorageService; $storage = new FileStorageService(); foreach ($storage->streamBackupData('/tmp/backup_42.json.enc') as $entry) { $table = $entry['table']; $row = $entry['row']; }
Совместимость форматов:
.jsonчитается потоково.- новый чанковый
.json.encчитается потоково. - legacy
.encподдерживается по совместимости, но не гарантирует ту же memory-efficiency на очень больших файлах.
Конфигурация
Пакетный конфиг: config/user-backup.php
return [ 'connections' => ['mysql', 'replica'], ];
Правила:
- если
user-backup.connectionsпуст, пакет берет все ключи изdatabase.connections; - для шифрования используется стандартный
APP_KEYLaravel; - путь сохранения backup выбирает приложение, не пакет.
- параметр
accountIdsв текущей интеграции проекта исторический и по факту содержит ids субсчетов.
Тесты
php -d pcov.enabled=1 vendor/bin/phpunit --coverage-text --coverage-html build/coverage
Текущее покрытие пакета: 100%.
Структура
src/Contracts/*— контракты сервисов и factory.src/Services/DatabaseService.php— потоковое чтение из БД.src/Services/FileStorageService.php— запись, шифрование и чтение backup-файлов.src/Services/UserBackupService.php— orchestration backup use case.src/Services/UserBackupServiceFactory.php— factory для container-friendly сценария.src/Services/UserDataDeletionService.php— очистка данных.src/ValueObjects/*— внутренние DTO/value objects.docs/user-backup-guide.md— полная документация.
fin/user-backup-lib 适用场景与选型建议
fin/user-backup-lib 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 289 次下载、GitHub Stars 达 0, 最近一次更新时间为 2024 年 10 月 14 日, 在 PHP 生态内属于活跃度较高的组件。
我们在过去多个企业项目中使用过 fin/user-backup-lib 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 fin/user-backup-lib 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
统计信息
- 总下载量: 289
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 11
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2024-10-14