0.0.16 • Published 8 years ago

nodedb v0.0.16

Weekly downloads
18
License
ISC
Repository
-
Last release
8 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

8 years ago

0.0.15

8 years ago

0.0.14

8 years ago

0.0.13

8 years ago

0.0.12

9 years ago

0.0.11

9 years ago

0.0.10

9 years ago

0.0.8

9 years ago

0.0.7

9 years ago

0.0.6

9 years ago

0.0.5

9 years ago

0.0.4

9 years ago

0.0.3

9 years ago

0.0.1

9 years ago