@k3000/store

0.1.0 • Public • Published

结构化存储工具

*1、低版本升级到1.3.0请执行upgrade和submit更新存储文件。
*2、1.5.0版本请注意page的用法。
*3、1.6.1修改String中文存储的BUG建议更新,更新请注意第1、2条和page的用法。
*4、1.7.0修复中文路径问题。

初始化和更新升级

import upgrade from 'dmb3'

const {appendSet, submit} = upgrade('test', {version: 1, password: '', newPwd: ''})

appendSet(/* */)

submit()

文件结构为:假设存储名为:test

test ┳ 1.2 ┳ buffer ┳
     ┃     ┃        ┇ // buffer格式或者文本格式的存储目录
     ┃     ┃        ┗
     ┃     ┣ data          // 数据存储文件
     ┃     ┣ index         // 数据索引文件
     ┃     ┗ index.mjs     // 数据访问文件,可以通过该文件访问指定版本
     ┣ ...
     ┣ 3   ┳ ...
     ┃     ┗ index.mjs     // 数据访问文件,可以通过该文件访问指定版本
     ┣ 4 ...
     ┗ index.mjs    // 默认入口文件,指向最新版本

数据类型

类型:Id, Uint, Int, Bool, Time, Float, String, Buffer, Text

import upgrade, {
    Bigint,
    bigintSerialize,
    BigUint,
    Buffer,
    Byte,
    Float,
    Id,
    Int,
    String,
    Text,
    Time,
    Uint
} from 'dmb3'
const {appendSet, submit} = upgrade('test')
appendSet('user', {
    uid: String,
    pwd: String('存MD5指').length(32),
    loginTime: Time().value(Time.update)
}, '用户表')
submit().then(() => console.log('完成'))

缺省写法与完整写法

// Time.value(Time.update) 和 Time().value(Time.update) 两种写法一样。
/* 例如:
appendSet('test', {
    id: Id,
})
等价
appendSet('test', {
    id: Id(),
})
*/

// Id 用法
Id('备注') // 会补全默认值
Id()
    .index(false) // 是否索引,此类型默认为 true
    .value('2') // 默认值,此类型缺省为 1
    .step(2) // 缺省自增值,此类型缺省为 1
    .remark('备注') // 可缺省
    
// Uint 用法
Uint()
    .index(false) // 是否索引,此类型默认为 false
    .value(2) // 默认值,此类型没有缺省值
    .step(2) // 缺省自增值,此类型没有缺省值
    .remark('备注') // 可缺省
    
// Int 用法
Int()
    .index(false) // 是否索引,此类型默认为 false
    .value(2) // 默认值,此类型没有缺省值
    .step(2) // 缺省自增值,此类型没有缺省值
    .remark('备注') // 可缺省
    
// Bool 用法
Bool()
    .index(false) // 是否索引,此类型默认为 false
    .value(false) // 默认值,此类型缺省为 false
    .remark('备注') // 可缺省
    
// Time 用法
Time()
    .index(false) // 是否索引,此类型默认为 false
    .value(Time.update) // 默认值,此类型没有缺省值,可取值:Time.update、Time.now
    .remark('备注') // 可缺省
    
// Float 用法
Float()
    .index(false) // 是否索引,此类型默认为 false
    .value(0.1) // 默认值,此类型没有缺省值
    .step(0.1) // 缺省自增值,此类型没有缺省值
    .remark('备注') // 可缺省
    
// String 用法
String()
    .index(false) // 是否索引,此类型默认为 false
    .value('123456') // 默认值,此类型没有缺省值
    .length(8) // 长度,此类型默认为 12
    .remark('备注') // 可缺省
    
// Buffer 用法
Buffer().remark('备注') // 可缺省
    
// Text 用法
Text().remark('备注') // 可缺省

存储结构更新写法

// 新增集合
appendSet('user', {
    uid: String,
    pwd: String('存MD5指').length(32)
}, '用户表')

// 更新集合备注
updateSetRemark('log', '日志表')

// 更新列
updateCol('user', {
    loginTime: Time().value(Time.update).remark('登录时间')
})

// 更名操作
renameSet('test', 'test2')
renameCol('user', {
    uid: 'usn',
    test: 'test2',
})

// 删除操作
deleteSet('test2')
deleteCol('user', 'test2')

const {submit} = upgrade('test', {
        version: 7,
        password: '123123',
        newPwd: '111111' // 新密码
    })

submit()

打开使用已有存储文件

使用

import storage from './test/index.mjs'  // 使用最新版本
import storage from './test/7/index.mjs'// 使用指定版本
import storage, {remark, getStruct} from './test/7/index.mjs' // 获取存储结构和集合备注

查:

storage.admin.find(admin => admin.usn.includes('test')).role

if (storage.admin.indexByUid('admin')[0].pwd === '123456');

// 带索引的时间
storage.admin.indexByLoginTime(-Infinity, '2022/01/01')

// 简单分页查询
storage.admin.page(admin => predicate(admin), index, size)

// 结果缓存的分页查询,缓存10秒
const params = {key: 'name', index: 1, size: 10}
storage.admin.page(admin => predicate(admin), 'index', 'size', params)
// 联合查询 eachFlat类似LEFT JOIN,filterFlat类似INNER JOIN
storage.user.eachFlat(storage.userRole, (a, b) => a.userId === b.userId)
            .filterFlat(storage.role, 'roleId')

增:

storage.admin.push(
    {
        usn: 'admin',
        pwd: '123456'
    },
    {
        usn: 'test',
        pwd: '123456'
    }
)

改:

storage.admin.find(admin => admin.usn === 'admin').role = 'root'

删:

storage.admin.remove(...storage.admin.filter(admin => admin.usn.startsWith('test')))

更多使用方法参考 test.mjs

保存:

storage.close() // 关闭并保存

Readme

Keywords

Package Sidebar

Install

npm i @k3000/store

Weekly Downloads

0

Version

0.1.0

License

ISC

Unpacked Size

214 kB

Total Files

38

Last publish

Collaborators

  • qshfu