Skip to content

Latest commit

 

History

History
51 lines (44 loc) · 2.77 KB

2.10.4_View_Meta.md

File metadata and controls

51 lines (44 loc) · 2.77 KB

2.10.4 view meta

2.10.4.1 view 种类

  • mysql中的view
  • dble中的view

2.10.4.2 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中去。

在Dble 2.19.10.0版本中新增了对mysql view创建的支持,mysql view会被dble直接下发到后端mysql中执行。 不过,创建mysql view有着各种限制,首先view 所属的schema必须采取以下配置,即垂直分片的方式:

<schema name="schema2" sqlMaxLimit="100" shardingNode="dn5">
</schema>

view中涉及的表必须是shardingNode dn5 中的表。对于mysql view,dble则没有持久化,但是依然会有相对应的view meta。mysql view 支持通过dble修改,也支持在后端节点手动修改并通过reload方式加载到dble。

2.10.4.2 view meta保存

本地文件存储

本地文件的存储中,对应的信息以JSON的格式存放在本地文件中,文件的存储路径以及文件名称通过bootstrap.cnf中的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