Zdb數(shù)據(jù)庫數(shù)據(jù)類型、分頁的一些介紹

細雨紛飛(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


image.png

我看到這了

阿木(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


image.png

這是 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


image.png

怎么顯示出來這個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


image.png

. 這是就是對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


image.png

細雨紛飛(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


image.png

細雨紛飛(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


image.png

阿木(345148965) 21:08:41


image.png

這個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)存開銷


image.png

阿木(345148965) 21:12:42


image.png

image.png

我添加后,這樣取不到

阿木(345148965) 21:12:51


image.png

查詢到了

細雨紛飛(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


image.png

前面 是true
為啥后面這個斷點沒有到?

阿木(345148965) 21:17:07


image.png

我查詢的參數(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


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
@阿木 加內(nèi)存 開大緩存

阿木(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

這個,怎么實現(xiàn)分頁?

阿木(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
查完 輸出以后 在輸出庫實現(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


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,303評論 2 89
  • 1、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明AI閱讀 16,203評論 3 119
  • 不知道你沒有這樣過: 看到別人不開心想安慰,卻發(fā)現(xiàn)找不到合適的話語,于是就把滿腔熱情和關(guān)心憋在心里。 想把自己心里...
    我是情緒怪人啊閱讀 2,632評論 0 0
  • 每個人都有的美好時光,我多希望能回到小的時候,那是一個陽光明媚早晨,那時候的我特別高興,時光啊可不可以...
    源源加油_ab4d閱讀 146評論 0 0
  • 看到這樣一個故事,我心里不便也是酸的,一個40歲被開除失業(yè)的父親,從辦公室,抱著零碎的物件,回到家。他喝了...
    作家彭雅倫閱讀 897評論 0 2

友情鏈接更多精彩內(nèi)容