workbunny/storage
Composer 安装命令:
composer require workbunny/storage
包简介
A lightweight storage for PHP based on sqlite3.
README 文档
README
workbunny/storage
🐇 A lightweight storage for PHP based on sqlite3 🐇
说明
- 创建连接
:memory: 内存数据库最好用作临时数据库
$client = new \WorkBunny\Storage\Driver([ # 内存数据库 'filename' => ':memory:', # test.db文件数据库 // 'filename' => 'test.db', 'flags' => 'SQLITE3_OPEN_READWRITE|SQLITE3_OPEN_CREATE', 'encryptionKey' => '' ]);
- 注册执行回调
每次SQL执行完后会触发执行回调
# 注册执行结束回调事件 \WorkBunny\Storage\Driver::onAfterExec(function (\WorkBunny\Storage\Driver $driver){ # 打印sql及执行时长 var_dump($driver->last(true)); });
- 执行
在执行大SQL语句时,预处理执行的耗时比较长
$client = new \WorkBunny\Storage\Driver(['filename' => ':memory:']); # 预处理执行 $res = $client->execute('SELECT * FROM `account` WHERE `id` = 1;'); if($res instanceof SQLite3Result){ var_dump($res->fetchArray()); # 受影响行数 $client->driver()->changes(); # 最后插入的行号 $client->driver()->lastInsertRowID(); } # 普通执行 $res = $client->query('SELECT * FROM `account` WHERE `id` = 1;'); if($res instanceof SQLite3Result){ var_dump($res->fetchArray()); # 受影响行数 $client->driver()->changes(); # 最后插入的行号 $client->driver()->lastInsertRowID(); } # 仅执行 // 成功返回true 失败返回false $res = $client->exec('SELECT * FROM `account` WHERE `id` = 1;');
- 建表
$client = new \WorkBunny\Storage\Driver(['filename' => ':memory:']); $client->create('account', [ 'id' => [ 'INT', 'PRIMARY KEY', 'NOT NULL', ], 'name' => [ 'VARCHAR(25)', 'NOT NULL', ], ]);
- 建表且建立索引
过多的索引会影响数据插入
$client = new \WorkBunny\Storage\Driver(['filename' => ':memory:']); $client->create('account', [ 'id' => [ 'INT', 'PRIMARY KEY', 'NOT NULL', ], 'name' => [ 'VARCHAR(25)', 'NOT NULL', ], ],[ 'CREATE INDEX `account_name` ON `account` (`name`);' ]);
- 删除表
$client = new \WorkBunny\Storage\Driver(['filename' => ':memory:']); $client->drop('account');
- 插入
尽可能的避免插入多条,插入多条可能会拼接成一个大SQL,导致SQL超出范围或是预处理执行耗时过高; 在事务内循环插入是个好的替代方案;
$client = new \WorkBunny\Storage\Driver(['filename' => ':memory:']); # 一次插入单条 $client->insert('account', [ 'id' => 1, 'name' => 'test' ]); # 一次插入多条 $client->insert('account', [ [ 'id' => 1, 'name' => 'test1' ], [ 'id' => 2, 'name' => 'test2' ] ]);
- 事务
使用 action() 时,回调函数内返回false或者抛出异常都可中断事务并回滚
$client = new \WorkBunny\Storage\Driver(['filename' => ':memory:']); # 开启 $client->begin(); # 回滚 $client->rollback(); # 提交 $client->commit(); # 事务执行 $client->action(function () { $client->insert('account', [ 'id' => 1, 'name' => 'test1' ]); $client->insert('account', [ 'id' => 2, 'name' => 'test2' ]); $client->insert('account', [ 'id' => 3, 'name' => 'test3' ]); # 返回false或者异常抛出则回滚 });
workbunny/storage 适用场景与选型建议
workbunny/storage 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 152 次下载、GitHub Stars 达 8, 最近一次更新时间为 2022 年 06 月 16 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「database」 「storage」 「sqlite3」 「lightweight」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 workbunny/storage 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 workbunny/storage 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 workbunny/storage 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Dibi is Database Abstraction Library for PHP
A SDK for working with B2 cloud storage.
Small library to access Microsoft Windows Azure Blob Storage with a Service or a StreamWrapper.
Store your language lines in the database, yaml or other sources
A package for automatically encrypting and decrypting Eloquent attributes in Laravel 5.5+, based on configuration settings.
Exposes SQLite APIs that are otherwise not available in PHP
统计信息
- 总下载量: 152
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 8
- 点击次数: 2
- 依赖项目数: 1
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2022-06-16