先說明我遇到的問題如圖("mqtt_disconnect"是設(shè)備斷開連接上傳數(shù)據(jù)绰姻,數(shù)據(jù)點(diǎn)比較多狂芋。"dev_online"是重新連接沒有對(duì)應(yīng)多個(gè)數(shù)據(jù)點(diǎn)屡萤。從途中看到是一個(gè)list集合或者數(shù)組,因?yàn)椤啊尽俊保?/p>
下面說一下解決方案:
剛剛開始我的思維邏輯是做個(gè)循環(huán)一點(diǎn)一點(diǎn)查詢數(shù)據(jù)庫(kù)闻妓,放到集合中,當(dāng)我真正實(shí)現(xiàn)這個(gè)功能,我很郁悶舔箭,查詢數(shù)據(jù)比較緩慢烙荷,不是一般的慢桶至,一個(gè)循環(huán)要做5-6次數(shù)據(jù)庫(kù)野瘦,簡(jiǎn)直讓我無法容忍泞遗,還特別占內(nèi)存如圖:
1.慢速解決方案一點(diǎn)一點(diǎn)查詢放到集合里面:
2.快速解決方案先從數(shù)據(jù)庫(kù)說起耙蔑,就是一次性從數(shù)據(jù)庫(kù)全部查詢出來如圖:
select*from zencloud_objects o
left join zencloud_payload py on o.payloadId=py.id
left join zencloud_heartbeat h on py.heartbeatId=h.id
where o.product_key=#{product_key}
這里可能會(huì)問返回什么情況钱豁?怎么處理幌蚊?(如圖)
如圖1所示 :是返回接收是一個(gè)以字段為key臭蚁,字段值為value的map集合
如圖2所示:遍歷這個(gè)集合相當(dāng)于雀哨,你獲取到的就是List之中一橫段數(shù)據(jù)(如下圖)捌浩,你遍歷之后相當(dāng)于取這個(gè)每個(gè)字段名的key浪听,去找對(duì)應(yīng)的value迈螟,放到集合當(dāng)中。這里相當(dāng)于查詢數(shù)據(jù)庫(kù)就一次,速度很快比較適用耘拇。
3.如何按timestamp時(shí)間順序顯示呢妻熊?
如圖:
這里就表示按字段時(shí)間順序查詢亿胸,當(dāng)然可以按數(shù)字順序類似的路星。