2.10.4 view meta

2.10.4.1 view meta概述

在Dble 2.18.11.0 版本中新添加了对于view的支持,作为一个中间件支持view采用的方法是和复杂查询类似的逻辑,将VIEW创建的语句中的select部分进行解析,并将解析所得到的解析树进行存储,当有query调用到视图的时候使用解析树进行局部的替代还原成完整的查询SQL,从而达到view实现的效果。

在MySQL中的View meta信息是一种持久化的存储。Dble中的view实现方式也类似,这样Dble中view的实现会给Dble本身带来状态,这个状态需要Dble自身进行保存和维护,所以在view中采取了和XA事务日志相似的方式,并且以视图创建SQL的形式进行以下两种方式的存储

  • 本地文件存储
  • ZK存储

在每次发生重启的时候Dble会在初始化meta的部分,通过读取文件或者是ZK中的信息将创建视图的SQL进行重新的解析,最终以解析树的形式保存到meta中去

2.10.4.2 view meta保存

本地文件存储

本地文件的存储中,对应的信息以JSON的格式存放在本地文件中,文件的存储路径以及文件名称通过server.xml中的viewPersistenceConfBaseDir和viewPersistenceConfBaseName两个参数进行配置(默认存储于./viewConf/viewJson中),具体的文件内容举例如下

[{
    "schema": "testdb",
    "list": [{
        "name": "view_test",
        "sql": "create view view_test as select * from a_test"
    }, {
        "name": "vt2",
        "sql": "create or replace view vt2 as select * from suntest"
    }, {
        "name": "suntest",
        "sql": "create view suntest as select * from sbtest"
    }]
}]
ZK K/V存储

在集群状态下Dble的各个内部状态需要同步,包括view的创建删除和修改,具体的key值会存储在ZK BASE_PATH/view下,并使用key值schema_name:view_name,在view中使用json的格式进行create sql和修改的serverID的存储,以下给出一个举例:

{
    "serverId":"10010",
    "createSql":"create view view_test as select * from a_test"
}

此JSON字符串当作value存储在 /..../view/testdb:view_test

results matching ""

    No results matching ""