jlaso / simple-memory-db
内存中的简单数据库
Requires
- php: >=5.4
- dariuszp/cli-progress-bar: ^1.0
- fzaninotto/faker: ^1.6
Requires (Dev)
- phpunit/phpunit: 5.1.*
This package is auto-updated.
Last update: 2024-09-15 10:31:42 UTC
README
内存中的简单数据库,必须从JSON数据中填充。
它完全存在于内存中,可以快速访问数据并进行操作,以便以非常高的速度处理数据。
安装
您只需在项目中要求此包
composer require jlaso/simple-memory-db
查看示例文件夹以了解如何使用它
示例
您有一个非常简单的示例,包含两个表:客户和税费,每个客户都有一个关联的税费类型。
为了实现您的数据,您必须创建一个扩展AbstractTable的类并声明属性 $indexMap
默认情况下, id
会自动索引。因此,此字段在每张表中都是必需的,必须在JSON中。
namespace JLaso\SimpleMemoryDb\Example;
use JLaso\SimpleMemoryDb\AbstractTable;
class CustomerTable extends AbstractTable
{
protected $indexMap = [
"tax_type_id",
];
}
大示例
您可以通过挤压来了解此数据库在您的系统中的大小限制。
为了用真实数据填充内存中的表,可以参数化生成json文件
php BigExample/generate.php
然后查看结果
php BigExample/demo.php
处理记录
如果您需要在加载到内存中时添加一些额外字段或以某种方式处理记录,您可以在您的表中实现 processRecord
方法
class TaxTable extends AbstractTable
{
protected $subtypes = [
0 => 'mandatory',
1 => 'optional',
2 => 'regulated',
3 => 'unknown',
];
protected function processRecord(&$record)
{
$module = count($this->subtypes);
$record['subtype'] = $this->subtypes[intval($record['value'] * 100) % $module];
return true; // or return false if you want to filter this record
}
}
修改方法
虽然这不是真正的数据库,但您可以插入新元素或删除现有的元素
插入
insert($data)
将新记录插入内存并更新索引以使其可访问。$data
可以是数组或实现 JLaso\SimpleMemoryDb\ToArrayInterface
的对象
更新
这是插入的别名,目前插入仅替换已插入的现有记录副本(如果有的话)。
删除
remove($id)
这将删除由 $id
指定的记录并更新索引以使其不可访问。
存储方法
为什么不...将其导出到JSON文件中。
saveToJsonFile($fileName)
查找方法
find($id)
仅获取由 $id
指定的当前记录或不存在时为null。
findAll($field, $value, $filterCallback)
如果 $field
和 $value
都为null,则返回所有记录。
始终将记录传递给 $filterCallback
以添加过滤条件,以便知道是否通过过滤。显然,如果 $filterCallback
为null,则不应用过滤。
您可以在测试文件夹中查看示例。
异常
从版本1.5开始,添加了属性 $notFoundThrowsException
以确定是否在记录未找到时抛出异常。