在處理指數行情數據時(IDXD),我遇到一個KYLIN性能查詢低下的問題,非常奇怪。經過一番研究發現了其中的原因並順利解決:
症狀:
select count(*) from sensitop.idxd where ticker = ‘000300’ and tradedate between ‘2016-01-01’ and ‘2016-07-01'
很快,不到一秒
select * from sensitop.idxd where ticker = ‘000300’ and tradedate between ‘2016-01-01’ and ‘2016-07-01'
很慢,要50多秒,有時候還會超時。
分析:
既然count很快,說明檢索cube本身是很快的,問題可能出在獲取數據上,可能是讀取數據的存在問題,需要檢查cube的設置
解決:
發現默認情況下,cube中的TRADEDATE字段是dict,當改成date時,性能問題得到解決。

結論:
這應該是一個反序列化的問題。當檢索cube完成之后,得到索引,之后需要從磁盤讀取數據並反序列化成對象。針對TRADEDATE,顯然dict的encoding和date的encoding存在巨大的性能差異。這一點值得我們注意!
