Amazon Ion是一种富类型、自描述、分层的数据序列化格式,提供可互换的二进制和文本表示形式。文本格式(JSON的超集)易于阅读和创作,支持快速原型设计。二进制表示对于存储、传输和跳过扫描解析是有效的。富类型系统为数据的长期保存提供了明确的语义,可以经受多代软件演化。
ION旨在解决设计大规模、面向服务的体系结构时每天面临的快速开发、解耦和效率挑战。近十年来,它一直在亚马逊内部解决这些挑战,我们相信其他人也会受益。
可用语言:C-C#-Java-JavaScript-Python相关项目:ION Hash-Ion Schema工具:配置单元SerDe。
所有JSON值都是有效的离子值,虽然任何值都可以用JSON编码(例如,时间戳值可以转换为字符串),但是这种方法需要额外的工作,模糊了数据的实际类型,并且容易出错。
相比之下,Ion的丰富类型系统实现了数据的明确语义(例如,可以使用时间戳类型对时间戳值进行编码)。下面说明了离子型系统的一些功能:
Symbol:为高优先级$#39;中频繁出现的字符串提供有效编码//使用特殊字符(本例中为';-';)//用单引号括起来。
ION提供两种编码:人类可读的文本(如上所示)和空间和读取效率高的二进制编码。采用二进制编码时,每个离子值都带有值的类型和长度前缀。下面说明了Ion的二进制编码提供的一些效率:
以下时间戳编码为JSON字符串,需要26个字节:“2017-07-26T16:30:04.076Z”。当以离子二进制编码时,该时间戳只需要11个字节:第一个字节6a表示该值是由随后的10个字节(这就是a所表示的)表示的时间戳(类型6)。如果这个特定的时间戳值不感兴趣,读取器可以通过跳过10个字节跳过该值。这种跳过值的功能可实现对Ion数据的更快导航。
符号的二进制编码将符号的文本替换为可通过符号表解析为原始文本的整数。这可以为频繁出现的符号节省大量空间!
虽然BLOB数据是用文本进行BASE-64编码的(每3个字节的原始数据就会产生4个字节),而编码为离子二进制的BLOB只是按原样编码-不需要进行BASE-64扩展!
/*Ion支持注释。*/这里有一个结构,它类似于JSON对象{//字段名不必总是用引号引起来名称:";FIDO";,//这是一个带';年';的整数。注释age:Years::4,//这是日期精度的时间戳生日:2012-03-01T,//这是一个列表,类似于一个JSON数组玩具:[//这些是符号值,类似于字符串,//但是以二进制的形式编码为整数ball,ROPE,],//这是一个小数点--以10为基数的浮点值权重:磅::41.2,//这是一个BLOB--二进制数据,它是//Base64}。
要了解更多信息,请查看文档页面,或查看官方支持的库和社区支持的工具的LIBS。有关如何贡献、如何联系Ion团队以及常见问题解答的信息,请参阅帮助。