zoukankan      html  css  js  c++  java
  • Avro Schema Evolution (avro schema演化,avro schema兼容性) 介绍

    Avro Schema Evolution

    schema evolution不知道中文官方翻译是什么,schema演化?进化?不管了,懂意思就好。本篇文章主要介绍一下Avro Schema进化后的一些兼容性问题。

    Schema Evolution有4种:

    Backward: 向后兼容,用新schema可以读取旧数据,有些字段没有数据,就用default值

    Forward: 向前兼容,用旧schema可以读取新数据,avro将忽略新加的字段

    Full: 全兼容,支持向前兼容,向后兼容

    Breaking: 不兼容

    1. Backward Compatible change

    Backward: 向后兼容,用新schema可以读取旧数据,有些字段没有数据,就用default

    • 由于有了默认值,我们可以使用新schema读取旧数据。如果字段不存在,Avro将使用默认值
    • 如果要向后兼容,新schema的新增栏位必须要有默认值

    2. Forward Compatible change

    • Forward: 向前兼容,用旧schema可以读取新数据,avro将忽略新加的字段
    • 如果要向前兼容,删掉的栏位必须要有默认值

     

     

    3. Fully Compatible change

    Full: 全兼容,支持向前兼容,向后兼容

    想要全兼容要做到以下两点:

    • 只添加有默认值的字段
    • 只移除有默认值的字段

    4. Not Compatible change

    下面的一些改变会导致不兼容:

    • 从枚举中添加/删除元素
    • 更改字段数据类型(例如:string à int)
    • 重命名必需的字段(字段没有默认值)

    编写Avro schema时的一些建议:

    1.Make your primary key required

    2.Give default values to all the fields that could be removed in the future

    3.Be very careful when using Enums as they can’t evolve over time

    4.Don’t rename fields. You can add aliases instead (other names)

    5.When evolving a schema, ALWAYS give default values

    6.When evolving a schema, NEVER delete a required field

  • 相关阅读:
    浅谈JavaScript中this指向的⼏种情况
    JavaScript、html简单的级联操作。
    异常处理中throws和throw的区别?
    java异常处理try-catch-finally的执行过程?
    什么是内连接、外连接、交叉连接(笛卡尔积)?
    主键和外键的区别
    集合和数组的比较(为什么要引入集合)?
    Java中对比单继承与多继承的优劣,以及java的解决方案
    数据库
    数据库集中控制的优势
  • 原文地址:https://www.cnblogs.com/fangjb/p/13305694.html
Copyright © 2011-2022 走看看