細雨紛飛(600585) 20:28:16
@阿木 zdb是對象數(shù)據(jù)庫,可以容納各種對象,對象和對象的區(qū)分,是用id來干的
zdb內(nèi)置了TDataFrameEngine(zs用的數(shù)據(jù)結(jié)構(gòu)),isDF就是表示當前查詢到的對象是DataFrameEngine支持的數(shù)據(jù)結(jié)構(gòu)
VL,是ThashVariantList,這是key-value的數(shù)據(jù)結(jié)構(gòu),value是Variant類型
VT,是THashStringList,也是key-value,value類型永遠是字符串
TE,是ini結(jié)構(gòu)的數(shù)據(jù)庫,是bigInI
Json不解釋了
Other是自定義的數(shù)據(jù)格式,比如圖片,就可以這種格式,自行去判斷id
TQueryState是查詢過程中使用的對象,每次爬取一個對象都會以它來作為參數(shù)和你的程序交互
阿木(345148965) 20:29:05
這個,解釋在哪里?
阿木(345148965) 20:29:07
我要看。
細雨紛飛(600585) 20:29:43
c_DF,c表示常量,const,df是DataFrameEngine的簡寫
阿木(345148965) 20:30:35
這個我知道,就是 每個數(shù)據(jù)引擎的標志位
林峰飛舞(5613606) 20:30:36
為什么不用全與
阿木(345148965) 20:30:45

我看到這了
阿木(345148965) 20:30:54
基本能理解
細雨紛飛(600585) 20:30:58
zdb存數(shù)據(jù),就兩種方式,addData和insertData,都是重載函數(shù),你可以給個你自己定義的id,然后用id來區(qū)分你的數(shù)據(jù)類型
細雨紛飛(600585) 20:32:06
query是遍歷查詢,在zdb中,有后臺線程查詢和前臺查詢,這里區(qū)分一下就沒問題,zdb不要用在線程中
細雨紛飛(600585) 20:33:05
zdb的數(shù)據(jù)存儲后,都會有個自己的StorePos,這個pos是數(shù)據(jù)庫的存儲坐標,你記住它就行了,以后需要就拿它去訪問數(shù)據(jù),不要再反復查詢了,浪費時間
細雨紛飛(600585) 20:33:50
我記得vl,vt這兩個結(jié)構(gòu)都有csv和大型txt的外部支持
阿木(345148965) 20:34:27

這是 json server 的demo,我想弄在本地。
阿木(345148965) 20:34:29
還不知道如何寫
阿木(345148965) 20:34:57
MyCustomJsonAnalysisQuery 實際就是一個過濾函數(shù)吧
細雨紛飛(600585) 20:35:05
有個zdblocal的demo,它默認是df格式,你改成json格式就行了
細雨紛飛(600585) 20:35:23
@阿木 是的,查詢回調(diào)
細雨紛飛(600585) 20:35:39
在zs有很多demo用到過zdb
阿木(345148965) 20:35:45
我先嘗試下,insert query json吧。
細雨紛飛(600585) 20:37:37
insert需要一個storePos,在它前面插入,一般來說,用addData就是寫數(shù)據(jù),查詢可以反向來
阿木(345148965) 20:37:48
嗯
細雨紛飛(600585) 20:38:33
數(shù)據(jù)和數(shù)據(jù)的關(guān)系+關(guān)聯(lián),都用storePos來干就行了
阿木(345148965) 20:39:05
storePos 還不知道怎么獲取呢
細雨紛飛(600585) 20:39:23
執(zhí)行query時,在state里面
阿木(345148965) 20:39:31
找到了
阿木(345148965) 20:40:47

怎么顯示出來這個json?
細雨紛飛(600585) 20:40:51
按序列化方式,找store array這類方法
細雨紛飛(600585) 20:42:30
zdb每次查詢都會有個查詢?nèi)蝿?,在任務中,有目標?shù)據(jù)庫,查詢的原數(shù)據(jù)庫,查詢到了多少條目,
每次遍歷會觸發(fā)filter,遍歷完成會觸發(fā)done
細雨紛飛(600585) 20:43:32
Pipeline,管線,是在zdb查詢?nèi)蝿栈A上做的高級查詢控制,
阿木(345148965) 20:44:03
我現(xiàn)在就是想在done里面顯示出來
細雨紛飛(600585) 20:44:39
在filter里面顯示單條json,在done顯示,你只能開output參數(shù),將查詢結(jié)果輸出,然后在done里面遍歷output數(shù)據(jù)庫
細雨紛飛(600585) 20:44:58
myoutput.waitquery(xxxx
細雨紛飛(600585) 20:47:26
也能在done時,再對myoutput做另一次查詢操作,即使你在查詢時候,讓output在1秒后釋放,zdb會等待output沒有查詢?nèi)蝿詹艜尫潘?/p>
阿木(345148965) 20:48:37

. 這是就是對output進行的另外查詢吧
細雨紛飛(600585) 20:49:44
zdb有很多層次,不要跨層使用,
比如objectdata是純api的底層
objectdatamanger,是將api包成對象
zdbengine,是在對象基礎上做成后臺引擎了
zdblocalmanager,是在后臺引擎 上,做成查詢管線,管理一批數(shù)據(jù)庫的中心系統(tǒng)
如果你在zdblocalmanager上使用,就不要去調(diào)用下面的zdbengine,反復查詢都用zdblocalmanager里面的方法
阿木(345148965) 20:50:33
假如我從1000條里面查詢,得到了10個json對象,這10個,必須每一個單獨處理,或者最后在10個json集合上遍歷。
細雨紛飛(600585) 20:50:57
@阿木 非常正確
阿木(345148965) 20:51:38
為啥不一次性的顯示出這10個json呢?數(shù)組
細雨紛飛(600585) 20:52:17
@阿木 為什么要顯示出來?數(shù)據(jù)時拿來用的,又不是拿來看的
阿木(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
你自己注意區(qū)分id就行了
阿木(345148965) 20:55:45
那就好,我用qjson存進去
阿木(345148965) 20:55:57
群主的json控制,用的superobject吧。
細雨紛飛(600585) 20:56:58

細雨紛飛(600585) 20:57:32
@阿木 隨意,反正都是對象,任何對象都可以用,只能能用stream讀取保存的東西,zdb都能驅(qū)動
細雨紛飛(600585) 20:57:59
你可以自己包super,幾個函數(shù)的事
細雨紛飛(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,給一個庫添加數(shù)據(jù)。
每個庫,對應一個文件,相當于一個對象集合,每個庫,只能有一種類型吧?
細雨紛飛(600585) 21:09:16
@阿木 不是。能有多種類型,你自己編程去判斷數(shù)據(jù)的ID
阿木(345148965) 21:09:50
明白了,類型,其實是可以轉(zhuǎn)換的。
阿木(345148965) 21:09:59
比如string和json
細雨紛飛(600585) 21:10:37
@阿木 有差別的
阿木(345148965) 21:11:23
我看代碼了,是不同的engin
細雨紛飛(600585) 21:11:29
你在查詢時,string是一個字符串,json算數(shù)據(jù)結(jié)構(gòu)了,都在內(nèi)存中,占用內(nèi)存大小各不相同,zdb退火系統(tǒng)就是管理他們的內(nèi)存暫用的
阿木(345148965) 21:12:00
這些明白
阿木(345148965) 21:12:02
了
細雨紛飛(600585) 21:12:40
比如這段代碼,js被zdb取出來,我們并沒有釋放,也沒有在使用前創(chuàng)建json,都是zdb內(nèi)部在管理它的內(nèi)存開銷

阿木(345148965) 21:12:42


我添加后,這樣取不到
阿木(345148965) 21:12:51

查詢到了
細雨紛飛(600585) 21:14:22
zdb為了達到最高的查詢效率,把你使用過的對象,都暫存到內(nèi)存去了,當你再次使用,相當于高頻率查詢,zdb會把對象直接調(diào)度到你面前,根本不需要反復創(chuàng)建,讀取zdb的stream
阿木(345148965) 21:15:31
querycounter是20,說明,遍歷全了。
阿木(345148965) 21:16:10
QueryResultCounter 也是1
阿木(345148965) 21:17:05

前面 是true
為啥后面這個斷點沒有到?
阿木(345148965) 21:17:07

我查詢的參數(shù)有問題吧?
三人行(1491567248) 21:17:13
分布式下,多臺服務器呢?
阿木(345148965) 21:17:16
第一個 應該是true
阿木(345148965) 21:17:22
可以
三人行(1491567248) 21:17:24
這個查到的數(shù)據(jù),是最新數(shù)據(jù)?
阿木(345148965) 21:17:33
用的就是 群主的io
三人行(1491567248) 21:18:10
后臺通過另一臺服務器更新,那從緩存取出來的數(shù)據(jù),就不一定是最新的了
阿木(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
@阿木 加內(nèi)存 開大緩存
阿木(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

這個,怎么實現(xiàn)分頁?
阿木(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
查完 輸出以后 在輸出庫實現(xiàn)分頁
阿木(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
