Zdb数据库数据类型、分页的一些介绍

细雨纷飞(600585) 20:28:16
@阿木 zdb是对象数据库,可以容纳各种对象,对象和对象的区分,是用id来干的
zdb内置了TDataFrameEngine(zs用的数据结构),isDF就是表示当前查询到的对象是DataFrameEngine支持的数据结构
VL,是ThashVariantList,这是key-value的数据结构,value是Variant类型
VT,是THashStringList,也是key-value,value类型永远是字符串
TE,是ini结构的数据库,是bigInI
Json不解释了
Other是自定义的数据格式,比如图片,就可以这种格式,自行去判断id
TQueryState是查询过程中使用的对象,每次爬取一个对象都会以它来作为参数和你的程序交互

阿木(345148965) 20:29:05
这个,解释在哪里?

阿木(345148965) 20:29:07
我要看。

细雨纷飞(600585) 20:29:43
c_DF,c表示常量,const,df是DataFrameEngine的简写

阿木(345148965) 20:30:35
这个我知道,就是 每个数据引擎的标志位

林峰飞舞(5613606) 20:30:36
为什么不用全与

阿木(345148965) 20:30:45


image.png

我看到这了

阿木(345148965) 20:30:54
基本能理解

细雨纷飞(600585) 20:30:58
zdb存数据,就两种方式,addData和insertData,都是重载函数,你可以给个你自己定义的id,然后用id来区分你的数据类型

细雨纷飞(600585) 20:32:06
query是遍历查询,在zdb中,有后台线程查询和前台查询,这里区分一下就没问题,zdb不要用在线程中

细雨纷飞(600585) 20:33:05
zdb的数据存储后,都会有个自己的StorePos,这个pos是数据库的存储坐标,你记住它就行了,以后需要就拿它去访问数据,不要再反复查询了,浪费时间

细雨纷飞(600585) 20:33:50
我记得vl,vt这两个结构都有csv和大型txt的外部支持

阿木(345148965) 20:34:27


image.png

这是 json server 的demo,我想弄在本地。

阿木(345148965) 20:34:29
还不知道如何写

阿木(345148965) 20:34:57
MyCustomJsonAnalysisQuery 实际就是一个过滤函数吧

细雨纷飞(600585) 20:35:05
有个zdblocal的demo,它默认是df格式,你改成json格式就行了

细雨纷飞(600585) 20:35:23
@阿木 是的,查询回调

细雨纷飞(600585) 20:35:39
在zs有很多demo用到过zdb

阿木(345148965) 20:35:45
我先尝试下,insert query json吧。

细雨纷飞(600585) 20:37:37
insert需要一个storePos,在它前面插入,一般来说,用addData就是写数据,查询可以反向来

阿木(345148965) 20:37:48

细雨纷飞(600585) 20:38:33
数据和数据的关系+关联,都用storePos来干就行了

阿木(345148965) 20:39:05
storePos 还不知道怎么获取呢

细雨纷飞(600585) 20:39:23
执行query时,在state里面

阿木(345148965) 20:39:31
找到了

阿木(345148965) 20:40:47


image.png

怎么显示出来这个json?

细雨纷飞(600585) 20:40:51
按序列化方式,找store array这类方法

细雨纷飞(600585) 20:42:30
zdb每次查询都会有个查询任务,在任务中,有目标数据库,查询的原数据库,查询到了多少条目,
每次遍历会触发filter,遍历完成会触发done

细雨纷飞(600585) 20:43:32
Pipeline,管线,是在zdb查询任务基础上做的高级查询控制,

阿木(345148965) 20:44:03
我现在就是想在done里面显示出来

细雨纷飞(600585) 20:44:39
在filter里面显示单条json,在done显示,你只能开output参数,将查询结果输出,然后在done里面遍历output数据库

细雨纷飞(600585) 20:44:58
myoutput.waitquery(xxxx

细雨纷飞(600585) 20:47:26
也能在done时,再对myoutput做另一次查询操作,即使你在查询时候,让output在1秒后释放,zdb会等待output没有查询任务才会释放它

阿木(345148965) 20:48:37


image.png

. 这是就是对output进行的另外查询吧

细雨纷飞(600585) 20:49:44
zdb有很多层次,不要跨层使用,
比如objectdata是纯api的底层
objectdatamanger,是将api包成对象
zdbengine,是在对象基础上做成后台引擎了
zdblocalmanager,是在后台引擎 上,做成查询管线,管理一批数据库的中心系统
如果你在zdblocalmanager上使用,就不要去调用下面的zdbengine,反复查询都用zdblocalmanager里面的方法

阿木(345148965) 20:50:33
假如我从1000条里面查询,得到了10个json对象,这10个,必须每一个单独处理,或者最后在10个json集合上遍历。

细雨纷飞(600585) 20:50:57
@阿木 非常正确

阿木(345148965) 20:51:38
为啥不一次性的显示出这10个json呢?数组

细雨纷飞(600585) 20:52:17
@阿木 为什么要显示出来?数据时拿来用的,又不是拿来看的

阿木(345148965) 20:52:45
我表达错了

阿木(345148965) 20:52:54
我的意思是,返回output的list

阿木(345148965) 20:52:59
或者array

阿木(345148965) 20:53:23
就是在done里面,直接拿到output list,而不需要再次query

阿木(345148965) 20:54:56
github

阿木(345148965) 20:55:11
我用string存进去,能当json拿出来吗?

细雨纷飞(600585) 20:55:12


image.png

细雨纷飞(600585) 20:55:23
@阿木 当然能

细雨纷飞(600585) 20:55:36
你自己注意区分id就行了

阿木(345148965) 20:55:45
那就好,我用qjson存进去

阿木(345148965) 20:55:57
群主的json控制,用的superobject吧。

细雨纷飞(600585) 20:56:58


image.png

细雨纷飞(600585) 20:57:32
@阿木 随意,反正都是对象,任何对象都可以用,只能能用stream读取保存的东西,zdb都能驱动

细雨纷飞(600585) 20:57:59
你可以自己包super,几个函数的事

细雨纷飞(600585) 20:58:18
尽量避免跨层直接使用

阿木(345148965) 21:05:47
TZDBLocalManager 可以同时管理一堆db吧,每个db一个文件

细雨纷飞(600585) 21:06:56
@阿木 它就是干这件事的

细雨纷飞(600585) 21:07:50
尽量避免跨层call,TZDBLocalManager本身就提供了增删查改了

细雨纷飞(600585) 21:08:13


image.png

阿木(345148965) 21:08:41


image.png

这个PostData,给一个库添加数据。
每个库,对应一个文件,相当于一个对象集合,每个库,只能有一种类型吧?

细雨纷飞(600585) 21:09:16
@阿木 不是。能有多种类型,你自己编程去判断数据的ID

阿木(345148965) 21:09:50
明白了,类型,其实是可以转换的。

阿木(345148965) 21:09:59
比如string和json

细雨纷飞(600585) 21:10:37
@阿木 有差别的

阿木(345148965) 21:11:23
我看代码了,是不同的engin

细雨纷飞(600585) 21:11:29
你在查询时,string是一个字符串,json算数据结构了,都在内存中,占用内存大小各不相同,zdb退火系统就是管理他们的内存暂用的

阿木(345148965) 21:12:00
这些明白

阿木(345148965) 21:12:02

细雨纷飞(600585) 21:12:40
比如这段代码,js被zdb取出来,我们并没有释放,也没有在使用前创建json,都是zdb内部在管理它的内存开销


image.png

阿木(345148965) 21:12:42


image.png

image.png

我添加后,这样取不到

阿木(345148965) 21:12:51


image.png

查询到了

细雨纷飞(600585) 21:14:22
zdb为了达到最高的查询效率,把你使用过的对象,都暂存到内存去了,当你再次使用,相当于高频率查询,zdb会把对象直接调度到你面前,根本不需要反复创建,读取zdb的stream

阿木(345148965) 21:15:31
querycounter是20,说明,遍历全了。

阿木(345148965) 21:16:10
QueryResultCounter 也是1

阿木(345148965) 21:17:05


image.png

前面 是true
为啥后面这个断点没有到?

阿木(345148965) 21:17:07


image.png

我查询的参数有问题吧?

三人行(1491567248) 21:17:13
分布式下,多台服务器呢?

阿木(345148965) 21:17:16
第一个 应该是true

阿木(345148965) 21:17:22
可以

三人行(1491567248) 21:17:24
这个查到的数据,是最新数据?

阿木(345148965) 21:17:33
用的就是 群主的io

三人行(1491567248) 21:18:10
后台通过另一台服务器更新,那从缓存取出来的数据,就不一定是最新的了

阿木(345148965) 21:18:16
弄出来了

阿木(345148965) 21:18:20


image.png

阿木(345148965) 21:18:27
基本思路明白了。

细雨纷飞(600585) 21:19:21
@阿木 以后你负责教zdb

细雨纷飞(600585) 21:19:37
教一个就行了,让他再教另一个

阿木(345148965) 21:29:36


image.png

这个是output吧?

细雨纷飞(600585) 21:34:24
是的

阿木(345148965) 21:43:24
这个,怎加索引?

阿木(345148965) 21:43:40
加入从1000万里面检索,还不慢死

阿木(345148965) 21:44:08
只有一个key的hash?

细雨纷飞(600585) 21:46:29
@阿木 加内存 开大缓存

阿木(345148965) 21:46:37


image.png

默认值是0,这个是个大bug

细雨纷飞(600585) 21:46:41
@阿木 不止

阿木(345148965) 21:47:26


image.png

尤其是这个 bool,有百分之五十的概率是错误的。

细雨纷飞(600585) 21:48:13
预处理一下

阿木(345148965) 21:49:41
起码要有个default

阿木(345148965) 21:50:46


image.png

这个,怎么实现分页?

阿木(345148965) 21:50:56
比如,查询11-20项

阿木(345148965) 21:51:13
有个limit

细雨纷飞(600585) 21:52:15
@阿木 查完 除法来分

阿木(345148965) 21:53:05


image.png

这个就是那个索引吧

阿木(345148965) 21:53:57
qState。StorePos 是按照顺序的吧

阿木(345148965) 21:54:07
或者说递增的。

细雨纷飞(600585) 21:54:46
是的

细雨纷飞(600585) 21:57:10
@阿木 index是 pos不是

细雨纷飞(600585) 21:57:57
查完 输出以后 在输出库实现分页

阿木(345148965) 21:58:59
输出库房分页,点击下一页的时候,还要在前面库

阿木(345148965) 21:59:07
还要在总库上跑一遍。

阿木(345148965) 21:59:19
除非把输出库保存。

阿木(345148965) 21:59:39
当时 10个人查询的条件不一样的,不可能为每个人保存一个输出库吧?

阿木(345148965) 22:03:58
TZDBLocalManager 是不是缺少个deleteDB?我没有找到

细雨纷飞(600585) 22:05:31
@阿木 分页用是临时库 让它活久点就行了

细雨纷飞(600585) 22:05:44
@阿木 有吧

阿木(345148965) 22:06:35
分页有思路

阿木(345148965) 22:06:39
删除没找到

细雨纷飞(600585) 22:09:39


image.png

你可能感兴趣的:(Zdb数据库数据类型、分页的一些介绍)