Vernox原生支持圖數據以節點和關系的形態存儲,并建立網狀圖索引。圖索引為圖表的基礎索引,不能單獨創建。檢索方式按照廣度優先方式或深度優先方式進行遍歷,對社交關系等網狀數據的存儲和操作具有天然優勢。同時,Vernox還原生支持json文本格式,極大方便了對多樣性文本數據的存儲和操作,不用再擔心新增數據是否能對應表結構中的字段,真正實現了大數據的實時存儲,也方便了上層大數據分析引擎的應用。Vernox采用json列的方式存儲json格式的數據,即每張表有一個名為“$”的字段,該字段用于存儲json格式數據。
Vernox不僅提供了結構化數據,文檔型數據和圖數據的存儲能力,更大的亮點是Vernox在內核數據操作上,實現了不同類型數據的Join操作,并以標準SQL語法對上層應用提供服務能力,大大提升了應用成同時操作多種類型數據的便利性和實時性。一句Join SQL語句即可完成傳統模式下,不同數據庫查詢,應用程序內存拼裝,應用處理一致性的低效率,高復雜的開發過程。
目前市場上有針對圖關系數據的圖數據庫,也有針對多樣性文本數據的文檔數據庫,但是,他們都是各自獨立應用,如果業務中有需求用到多種數據庫,那么同時操控多個庫將是一個龐大而復雜的工程。因此Vernox決定將多種功能融于一身,集合關系、圖數據庫、文檔數據庫的優勢,打造出國內鮮有的融合數據庫。
2、Vernox核心優勢-字符串索引
在關系型數據庫中,對于字符串類型的字段建立B+樹索引的方式都是將完整的字符串存入B+樹索引的節點中。在節點內部按照整個字符串的字典序排列。這樣的B+樹索引方式存在的問題是,對帶有前百分號的字符串模糊匹配支持并不是友好。具體而言,對于like‘%X%’或者like‘%X’形式的查詢條件只能使用覆蓋索引遍歷或者全表遍歷,只有like‘X%’形式的條件可以很好的使用B+樹索引。而在目前在許多應用中會大量使用like‘%X%’形式的查詢,傳統關系型數據庫在該情況下所使用的全表遍歷策略效率十分緩慢。
針對這樣的情況,Vernox在已有的B+樹索引的基礎上,引入了后綴數組。自主研發出高效精準的字符串索引,用于漢字模糊匹配。具體原理如下:
字符串的后綴是指字符串某位置與字符串結尾之間的子串,而后綴數組(Suffix Array)則是一個存放該字符串所有后綴的一維數組,這些子串按照字典序由小到大依次排列。

從上面對后綴數組的描述中不難發現,在后綴數組中所有后綴按照其字典序排列,所以可以通過二分法快速的找到符合條件的后綴,這與B+樹的查詢規則相同。所以我們將B+樹索引與后綴數組這兩種已有技術相結合,提出了一種基于后綴數組的字符串B+樹索引,從而使B+樹索引可以支持帶有前百分號的字符串模糊匹配。
3、Vernox核心優勢-基于成本的智能優化
大部分的關系型數據庫,sql解析一共分為4步:
1、 語法檢查:此步驟檢查sql語句的拼寫是否符合標準語法;
2、語義檢查:此步驟檢查sql語句中對象及字段是否真實存在,以及該用戶是否具備相應操作權限;
3、語句解析:關系型數據庫在這一步時根據統計信息生成基于成本的執行計劃,執行計劃將一直緩存于內存中,以備將來復用。
Sql解析主要分為2類:硬解析(hard parse)和軟解析(soft parse),硬解析即每次執行語句時都根據當前條件成本產生執行計劃;軟解析在sql解析這一步,一旦在執行計劃中找到相似模板,即調用對應模板的執行計劃進行解析,軟解析省去了評估條件成本所耗費的大量系統資源。
·
執行sql,返回結果

Vernox全程采用硬解析。軟解析雖然能節省系統資源,但存在一個問題,完全根據緩存中的執行計劃模板進行匹配解析,有可能會造成索引先走成本較高條件,再走成本較低條件,這樣雖然節省了系統資源,但sql解析本身的成本依然很高。
對于傳統關系型數據庫來說,他們的架構本身是基于磁盤,如果每次sql解析都采用硬解析,頻繁的磁盤I/O會耗費大量CPU資源,而Vernox對索引緩存結構進行改進,保證了所有sql解析都在內存進行,極大降低了系統資源消耗,因此我們決定全程使用sql硬解析,實現了真正基于成本的智能查詢。
內存索引的成本評估精確到每個條件命中的條數,磁盤索引的成本評估也可以做到每個條件命中的葉子數據塊數。