0.6.7 • Published 1 year ago

dmb2 v0.6.7

Weekly downloads
-
License
ISC
Repository
-
Last release
1 year ago

结构化存储工具

第一次使用初始化

import open, {close} from 'dmb2'

const storage = open('test', {
    upgrade({appendSet}) {
        // todo: appendSet(/* ... */)
    }
})

storage[close]()

更新升级

import open, {close} from 'dmb2'

const storage = open('test', {
    version: 1.2,
    upgrade(/* ... */) {
        // 当前版本 version 大于指定版本 version: 1.2 就会触发 upgrade 回调
        // todo
    }
})

storage[close]()

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

test ┯ 1.2[version] ┳ buffer ┳
                    ┃        ┇ // buffer格式或者文本格式的存储目录
                    ┃        ┗
                    ┣ data          // 数据存储文件
                    ┣ index         // 数据索引文件
                    ┗ index.mjs     // 数据开发指导文件(更新开发文件选:是)

数据类型

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

import open, {Id, Uint, Int, Bool, Time, Float, String, Buffer, Text, close} from "dmb2";
...
    upgrade({appendSet}) {
        appendSet('user', {
            uid: String,
            pwd: String('存MD5指').length(32),
            loginTime: Time().value(Time.update)
        }, '用户表')
    }
...

缺省写法与完整写法

// 在 upgrade() 中 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('备注') // 可缺省

存储结构更新写法

upgrade({appendSet, appendCol, updateSetRemark, updateCol, renameSet, renameCol, deleteSet, deleteCol}) {
    // 新增集合
    appendSet('user', {
        uid: String,
        pwd: String('存MD5指').length(32)
    }, '用户表')
    
    // 新增列
    appendCol('user', {
        loginTime: Time().value(Time.update)
    })
    
    // 更新集合备注
    updateSetRemark('log', '日志表')
    
    // 更新列
    updateCol('user', {
        loginTime: Time().value(Time.update).remark('登录时间')
    })
    
    // 更名操作
    renameSet('test', 'test2')
    renameCol('user', {
        uid: 'usn',
        test: 'test2',
    })
    
    // 删除操作
    deleteSet('test2')
    deleteCol('user', 'test2')
    
    // 碎片整理,当改变存储结构就会产生有的空间没办法回收,可以通过这种方法回收因为结构变化占用的空间
    open('test', {version: 3, minimum: true})
}

打开使用已有存储文件

开发模式,开发模式可以看到存储有哪些集合,集合内有哪些列,支持哪些操作等提示

import open, {close} from "./test/2/index.mjs";

生产模式

import open, {close} from "dmb2";

连接

let storage = open('test') // 普通使用
storage[close]() // 打开后不会自动释放,按需经行关闭释放

storage = open('test', '123123') // 设置和使用密码
storage[close]()

storage = open('test', {
    newPwd: '新密码',
    password: '旧密码',
    version: 1, // 版本号
    upgrade: () => {}, // 版本号增加后触发的回调函数
    noCache: false, // 是否使用缓存,默认使用
    dev: false, // 开发模式可以更清晰的看到存储结构
    minimum: false // 升级版本号来回收空间,要求不配置upgrade
})
storage[close]()

使用

查:

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: 0, size: 1}
storage.admin.page(admin => predicate(admin), 'index', 'size', params)

增:

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]()

0.6.7

1 year ago

0.6.6

1 year ago

0.6.5

1 year ago

0.6.4

1 year ago

0.6.3

1 year ago

0.6.2

1 year ago

0.6.1

1 year ago

0.6.0

1 year ago