cybrox/crunchdb

Dead-simple json file based data storage for php applications

3.2.2 2018-07-15 00:59 UTC

This package is not auto-updated.

Last update: 2024-09-23 14:08:32 UTC


README

crunchDB - 另一个 json 数据库?

是的,crunchDB 是一个基于存储信息在多个 json 文件中的简单数据库系统,由 PHP 编写。每个 json 文件代表一个表,可以通过 crunchDB 访问和修改。嗯,虽然已经存在其他基于 json 的系统,但事实上,我没有找到任何能够以简洁明了的方式提供我所需要的所有功能的东西。虽然 crunchDB 目前非常简单,但它可能会获得额外的功能,使其更强大。在其当前状态下,它非常适合用于像小型聊天客户端这样的小型项目。 - 这就是我编写它的原因。

项目结构

此存储库包含一个 src 目录,其中包含所有 crunchDB 文件。还有一个示例文件,用于演示一些操作。您可以下载并运行此文件,它将在测试后删除其创建的表所做的所有更改。

功能

显然,crunchDB 需要某种功能。否则,它几乎没有任何用处,不是吗?
以下是所有当前实现的功能列表。

$cdb = new CrunchDB('./db/', 'json', 'rw') 使用以下参数初始化 crunchdb

  • 目录 - 所有 json 文件存储的目录路径。
  • 扩展名 - 数据库文件的扩展名。(此参数是可选的,默认设置为 json
  • 数据库模式 - 数据库访问模式。可以是只读(r)或读写(rw)。(尚未实现!)

请注意:crunchDB 目前不支持或处理文件锁定。因此,强烈不建议将其用于任何比简单内部工具更复杂的应用(显然主要是指需要并发访问的应用)!

参数说明

*1 SELECT 参数

这是用于选择的多个数组参数。您可以为多个键添加过滤,例如 ['type', '==', 'user'] 会搜索所有 type 列等于 'user' 的行。在这里,第一个元素是要搜索的 ,第二个元素是 比较运算符<<===>=>),第三个元素是要比较的相应 ,可选的第四个参数可以是 'and''or'。您还可以像以下那样链式使用选择参数

// Search for rows with the type `user` **OR** `admin
...->select(['type', '==', 'user'],['type', '==', 'admin'])->...

// Search for rows with the type `user` **AND** the `name` 'cybrox' 
...->select(['type', '==', 'user'],['name', '==', 'cybrox', 'and'])->...
*2 SORT 参数

这是用于排序的多个数组参数。您可以添加多个键以排序,例如 ['name']['name', SORT_DESC]。每个数组最多可以包含 3 个参数,即排序的列名(必需),可以是 SORT_ASC 或 SORT_DESC(可选)以及投影函数(可选)。
您也可以像以下那样链式使用排序参数

// Sort by number descending and then by name descending.
...->sort(['type', SORT_DESC], ['name', SORT_DESC])->...
*3 UPDATE 参数

这是用于更新的多个数组参数。您可以为更新添加多个键值对,例如 ['name','cybrox']。您可以链式添加任意多个字段进行更改。

// Update type and name of a resource.
...->update(['type','admin'],['name','cybrox'])->...

代码示例

<?php

  use cybrox\crunchdb\crunchDB as crunchDB;
  $cdb = new crunchDB('./db/');

  $cdb->version();
  $cdb->table('cookies')->exists();
  $cdb->table('cookies')->create();
  $cdb->table('cakes')->create();
  $cdb->table('cakes')->alter('cheese');
  $cdb->tables();
  $cdb->table('cookies')->count();
  $cdb->table('cookies')->insert(array("type" => "chocolate", "is" => "nice"));
  $cdb->table('cookies')->insert(array("type" => "banana", "is" => "nice"));
  $cdb->table('cookies')->insert(array("type" => "strawberry", "is" => "ok"));
  $cdb->table('cookies')->raw();
  $cdb->table('cookies')->select('*')->fetch();
  $cdb->table('cookies')->select('*')->count();
  $cdb->table('cookies')->select(['type', '==', 'chocolate'])->fetch();
  $cdb->table('cookies')->select(['type', '==', 'chocolate'],['type', '==', 'banana', 'or'])->fetch();
  $cdb->table('cookies')->select(['type', '==', 'chocolate'],['type', '==', 'banana', 'and'])->count();
  $cdb->table('cookies')->select('*')->sort(['type'])->fetch();
  $cdb->table('cookies')->select(['type', '==', 'strawberry'])->delete();
  $cdb->table('cookies')->select(['type', '==', 'banana'])->update(['type', 'chocolate']);
  $cdb->table('cookies')->select('*')->fetch();

?>