1、融合关系、图、文档(json)于一身
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硬解析,实现了真正基于成本的智能查询。
内存索引的成本评估精确到每个条件命中的条数,磁盘索引的成本评估也可以做到每个条件命中的叶子数据块数。