walter-a-jablonowski / json-db
使用文件系统目录和文件的极简 JSON 数据库
dev-main
2021-08-30 00:12 UTC
Requires
- php: >=5.5.9
This package is auto-updated.
Last update: 2024-09-29 05:56:37 UTC
README
使用文件系统目录和文件的极简 JSON 数据库
目前处于开发中
最近 ... 闲暇时间在处理更重要的周末项目时随意完成的;-)
composer update
概念
我们忽略了文件系统中信息是以文件、文件夹和在这种情况下 JSON 键组织的事实。相反,我们将所有内容处理为一个大的逻辑信息树。文件和文件夹名称是层级键,在 JSON 文件中作为 JSON 键继续。
信息通过 `hierarchical.key` 访问。库将负责加载所需的内容。
因此,我们无需处理信息的组织方式,只需使用它。如果您保存新的信息,库将使用标准行为来确定保存的位置(见下文)。如果您想自己控制文件系统的结构,您只需创建一些文件夹和空 JSON 文件即可。库将使用现有文件。使用方式非常直观:$data = $db->query('things.some_thing')
。
读取
写入
save() 将给定的键分割成部分,例如 `folder.part.file-part.json.part`。它将寻找可能已经包含数据的现有文件夹和文件。行为如下:
注释
- (1) 如果它有更多键,这些键将被用作 JSON 键
- (2) 类似 JavaScript:对象是一个具有字符串键的数组,数组是一个具有数字键的数组
- (3) 如果您想将一些键用作 JSON 键,请首先调用 ensureFolder() 任务或 ensureFile()?
- (4) 如果您想将数组分割成多个文件,请使用循环并多次调用 `->save()`
开发
- 我们有删除文件的功能吗?或者只是文件夹?
用法
$db = new JsonDB('some/db'); $data = $db->query('things.some.thing') ->filter( fn($v, $k) => floatval($v['price']) < 50.0 ) ->sort( fn($a, $b) => // uses uasort() $a['price'] == $b['price'] ? 0 : $a['price'] < $b['price'] ? -1 : 1 ) ->get(); foreach( $data as $rec ) var_dump( $rec ); // Save $db->save('0.someval', 'myval'); // Join stuff: a join is just a loop joining 2 arrays
替代方案: https://sleekdb.github.io,https://github.com/Lazer-Database/Lazer-Database
高级
也许 ...
- 当一个文件包含数组并且我们保存 obj 时,我们可能需要以某种方式解决这个问题
- get('first') get(idx) 保存一些方法:没有 first()
- save('first') save(idx)
- delete('last') delete(idx)
- 我们可以添加一个方法,它返回一个查询信息的“子数据库”,该数据库可以再次进行过滤,例如在循环中
- 完成 delete()
- 添加更多文件类型,重命名项目 - 从此开始
- 纯文本也是可以通过键访问的数据
- yml 文件
- md 文件
- 图像
- ...
- 也许实现 has()
- 也许还应该在 my/folder/* 时加载子文件夹
这目前是未定义的行为
- 仅包含 JSON 子键的文件夹可能意味着删除所有文件(文件没有子键,只有文件夹)
许可证
版权 (C) Walter A. Jablonowski 2021,MIT 许可证
请参阅 credits 了解用于示例中的第三方软件的许可证。