0.0.16 • Published 10 years ago

nodedb v0.0.16

Weekly downloads
18
License
ISC
Repository
-
Last release
10 years ago

nodedb

暂时想不到准确的描述方式,以后再

以下是一些笔记

  • 这个“数据库”,目前能力有限,使用文件存储,而且是明文的,这个底层以后再想
  • 每个“文档”存储一个文件,文件名为 md5(useridentity)+''+user_identity
  • 文件内容为json序列化,这个部分以后可能要注意try-catch
  • 导出的模块是个function,需要传入一个对象作为参数,对象包含一个属性 path,代表的是数据存储的位置,缺省是是当前目录
  • 你要确保这个path有写入权限
  • 模块初始化时会检查这个path下面有没有 _indexs 目录,否则会自行创建(一般也就第一次),这个是索引的目录
  • 说到索引,这是个反向索引,通过 路径+值来做hash,反向指向 uid
  • test

这里需要阐述一些名词

路径:文档的每一个节点都可以通过一个路径来访问,举个例子,一个uid为 baiqi 的文档如下
{
	'name':'小白',
	'age':17,
	'tel':{
		'work':110
	}
}
那么,通过  /baiqi/name  就可以读取到 '小白' ; 
通过 /baiqi/tel/work 就可以读到 110,
同样可以通过 /baiqi/tel 读取 {'work':110}

get 、 put 、 match 、 range

get
文档获取的方法,支持任意深度,如 
nodedb.get('/baiqi/name',function(e,r){
 	//r => '小白'
});

put 
写入数据的方法,节点不存在时会创建,节点存在时,只更新传入的属性,如
第二个参数为写入的数据,第三个参数会根据第二个参数类型变化,后面索引部分详细讲
nodedb.put('/baiqi/age',16,true,function(e,r){
	// 只会更新 age 信息,不影响 name 以及其他属性, true 表示对age=16做索引
});
也可以用对象形式写入,索引参数传数组
nodedb.put('/baiqi',{age:16,type:'农历'},['age'],function(e,r){
	 //只会更新 age 信息,不影响 name 以及其他属性,
	 //['age'] 表示针对 对象的age属性做索引,对type属性不索引,结果和上面的例子是一样的
});

match
对指定路径的值做全匹配查询,前提是put的时候做了索引,需要注意第一个参数的写法
nodedb.match('/age',16,function(e,r){
	// 返回一个数组  [{uid: 'baiqi',data:{name: '小白',age: 18} } ]
});

range
这个是对数字(整数)类型数据的范围查询,同样需要put的时候索引
nodedb.range('/age',[6,19],function(e,r){
	// 表示查询age在6,19之间的文档,返回数组
	//如果是 [19,6]表示大于等于19 或 小于等于6,两端延伸的开区间
});
0.0.16

10 years ago

0.0.15

10 years ago

0.0.14

10 years ago

0.0.13

10 years ago

0.0.12

10 years ago

0.0.11

10 years ago

0.0.10

10 years ago

0.0.8

10 years ago

0.0.7

10 years ago

0.0.6

10 years ago

0.0.5

10 years ago

0.0.4

10 years ago

0.0.3

10 years ago

0.0.1

10 years ago