為了效能與安全性考量,RDBMS提供的prepare statement的用法,CASSANDRA/SCYALLA會有嗎?答案是有的。
CQL提供的prepare statement語句,與我們在RDBMS裡面使用的方是基本上是相似的。
如下:
INSERT INTO tb (key, val) VALUES (?,?)
每個prepare statement,SCYALLA會利用MD5的方式做hash,存放在查詢的快取裡面。
如此一來,有相同的語法進來,就可以不用再重新解析語意,有全新的prepare statement在解析完語法之後,同樣也經過hash存在快取當中,因此每種語法只需解析一次,達到優異的效能。
講到prepare statement,其實就跟程式語言實作比較有關係了,因為沒事不會在cqlsh或者任何IDE裡面去使用prepare statement對吧。
從這邊要開始帶入到程式語言處理的部分,SCYALLA目前提供的主要有三種db driver,分別是:
連線的原理大致上都是一樣的,首先程式端與SCYALLA的cluster建立連線,完成一些初使化的動作後,就擁有一個session
物件,建立TCP連線,控制與DB的連接與處理。
session
可以分別對不同的節點(node)作連線池管理,而且在CQL的設計上本來就可以一次發多的request,因此session
建立後重複使用同一個,使用一次就馬上關閉,或者開出多個session都不是洽當的選擇。
筆者的工作環境,以golang為主要的開發語言,與SCYLLA恰好搭配一起使用,下一章開始會為大家簡單介紹gocqlx與一些使用方式。