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

  • 相关阅读:
    【LeetCode】13. 罗马数字转整数
    【LeetCode】9. 回文数
    【LeetCode】7. 整数反转python3
    【LeetCode】7. 整数反转
    【LeetCode】1. 两数之和
    拖拽选择区域日历组件
    gitlab之gitlab-ci自动部署
    GitLab 安装和配置
    移动端键盘弹起导致底部按钮上浮解决方案
    JS判断滚动条是否停止滚动
  • 原文地址:https://www.cnblogs.com/fangjb/p/13305694.html
Copyright © 2011-2022 走看看