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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355

推荐阅读更多精彩内容