• 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

  • 相关阅读:
    node.js----服务器http
    node.js---对文件操作
    node.js
    历史管理
    h5
    git与github
    js中面向对象(创建对象的几种方式)
    jq基础
    POJ 2492 A Bug's Life
    POJ 1742 Coins
  • 原文地址:https://www.cnblogs.com/fangjb/p/13305694.html
Copyright © 2020-2023  润新知