先說(shuō)明我遇到的問(wèn)題如圖("mqtt_disconnect"是設(shè)備斷開連接上傳數(shù)據(jù),數(shù)據(jù)點(diǎn)比較多。"dev_online"是重新連接沒(méi)有對(duì)應(yīng)多個(gè)數(shù)據(jù)點(diǎn)。從途中看到是一個(gè)list集合或者數(shù)組,因?yàn)椤啊尽俊保?/p>

下面說(shuō)一下解決方案:
剛剛開始我的思維邏輯是做個(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)直讓我無(wú)法容忍,還特別占內(nèi)存如圖:
1.慢速解決方案一點(diǎn)一點(diǎn)查詢放到集合里面:

這是比較笨的辦法而且不實(shí)用
2.快速解決方案先從數(shù)據(jù)庫(kù)說(shuō)起,就是一次性從數(shù)據(jù)庫(kù)全部查詢出來(lái)如圖:

這是根據(jù)一個(gè)值查詢3張表
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ì)問(wèn)返回什么情況?怎么處理?(如圖)

返回map集合
如圖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í)間順序顯示呢?
如圖:

對(duì)應(yīng)字段加上就ok拉
這里就表示按字段時(shí)間順序查詢,當(dāng)然可以按數(shù)字順序類似的。