细雨纷飞(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
我看到这了
阿木(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
这是 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
怎么显示出来这个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
. 这是就是对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
细雨纷飞(600585) 20:55:23
@阿木 当然能
细雨纷飞(600585) 20:55:36
你自己注意区分id就行了
阿木(345148965) 20:55:45
那就好,我用qjson存进去
阿木(345148965) 20:55:57
群主的json控制,用的superobject吧。
细雨纷飞(600585) 20:56:58
细雨纷飞(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
阿木(345148965) 21:08:41
这个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内部在管理它的内存开销
阿木(345148965) 21:12:42
我添加后,这样取不到
阿木(345148965) 21:12:51
查询到了
细雨纷飞(600585) 21:14:22
zdb为了达到最高的查询效率,把你使用过的对象,都暂存到内存去了,当你再次使用,相当于高频率查询,zdb会把对象直接调度到你面前,根本不需要反复创建,读取zdb的stream
阿木(345148965) 21:15:31
querycounter是20,说明,遍历全了。
阿木(345148965) 21:16:10
QueryResultCounter 也是1
阿木(345148965) 21:17:05
前面 是true
为啥后面这个断点没有到?
阿木(345148965) 21:17:07
我查询的参数有问题吧?
三人行(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
阿木(345148965) 21:18:27
基本思路明白了。
细雨纷飞(600585) 21:19:21
@阿木 以后你负责教zdb
细雨纷飞(600585) 21:19:37
教一个就行了,让他再教另一个
阿木(345148965) 21:29:36
这个是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
默认值是0,这个是个大bug
细雨纷飞(600585) 21:46:41
@阿木 不止
阿木(345148965) 21:47:26
尤其是这个 bool,有百分之五十的概率是错误的。
细雨纷飞(600585) 21:48:13
预处理一下
阿木(345148965) 21:49:41
起码要有个default
阿木(345148965) 21:50:46
这个,怎么实现分页?
阿木(345148965) 21:50:56
比如,查询11-20项
阿木(345148965) 21:51:13
有个limit
细雨纷飞(600585) 21:52:15
@阿木 查完 除法来分
阿木(345148965) 21:53:05
这个就是那个索引吧
阿木(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