6

数据描述语言

 2 years ago
source link: http://antkillerfarm.github.io/technology/2022/04/08/DDL.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

数据描述语言

DDL(Data Description Language)早年间基本就是XML的同义词。20年前上大学的时候,甚至还学过一门XML相关的选修课程。不过这些都是老古董了,从2010年以来,JSON基本取代了XML的地位。

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。

其官网为:

http://json.org/

官网上列出了各种语言的JSON解析库。其中C语言的解析库中以json-c最为流行,其官网为:

https://github.com/json-c/json-c

和XML Path类似,JSON也定义了自己的JSON Path。参见:

http://goessner.net/articles/JsonPath/

https://addons.mozilla.org/zh-CN/firefox/addon/jsonview/

jsonview是一个用于检验JSON格式是否合法的Firefox插件。

http://www.bejson.com/

一个在线验证JSON语法的库。

https://docs.python.org/2/library/json.html

python自带的json包的文档

https://mp.weixin.qq.com/s/qk8hlcE3oxa-4a-G4sxGVg

为什么说JSON不适合做配置语言?

https://mp.weixin.qq.com/s/qjDj02UuJ8KB4bklZG3odA

9款你不能错过的JSON工具

https://mp.weixin.qq.com/s/ZbTQ3fSt4TDGwYILurjC5g

json for modern c++的使用

https://mp.weixin.qq.com/s/c3B0HtrHWEM5AoTydQAOTw

Python处理JSON数据

nlohmann json

nlohmann/json是一个用于解析json的开源c++库。

https://github.com/nlohmann/json

https://www.cnblogs.com/maizhongfei/p/14164895.html

nlohmann/json的主要用法

Jackson

Jackson是常用的Java语言的JSON库。

Maven安装:

<dependency>
	<groupId>com.fasterxml.jackson.core</groupId>
	<artifactId>jackson-databind</artifactId>
	<version>2.6.4</version>
</dependency>

Jackson提供了三种处理方法:

流式API:(也称为”增量分析/生成”)读取和写入 JSON 内容作为离散事件。类似于XML SAX。

com.fasterxml.jackson.JsonParser读,com.fasterxml.jackson.JsonGenerator写。

树模型:提供一个JSON文档可变内存树的表示形式。类似于XML DOM。

com.fasterxml.jackson.databind.ObjectMapper生成树;树组成JsonNode节点集。

数据绑定:JSON和POJO相互转换,基于属性访问器规约或注解。

Jackson不支持JSON Path,可以使用以下项目:

https://github.com/jayway/JsonPath

这个项目的后端可以选择Jackson或Gson。

Binary JSON是在JSON的基础上,添加了索引及数据类型的一种二进制格式。相比JSON,它牺牲了可阅读性,得到了可遍历性和高效性。

BSON最早由MongoDB项目提出并使用,它的官网为:

http://bsonspec.org/

从中可以看出大多数语言的BSON解析库,都是MongoDB项目提供的。

YAML(Yet Another Markup Language)是JSON的超集。它没有JSON那么流行,主要被用于科学计算领域,比如OpenCV项目。它的官网为:

http://yaml.org/

这个网站很有特色,它本身就是一个YAML文件。

YAML的python语言解析库主要有PyYAML和ruamel.yaml。前者貌似已经不再维护,所以目前主要使用后者。

ruamel.yaml官网:

https://yaml.readthedocs.io/en/latest/

这里谈一下我司在这方面的实践。我司有个项目最初脱胎于Caffe,因此,配置文件沿用了Protocol Buffers格式。然而PB格式在发布时,还需要相应的proto文件配套,才能解析。此外,PB文件是二进制,不便修改。因此,我们很快就改用json了。

用了两年之后,发现json对于客户的修改,还是不够友好。因此又换用了YAML。

https://zhuanlan.zhihu.com/p/33477002

读写yaml文件

https://mp.weixin.qq.com/s/AWMNPnec2hQVyAQBONuBRQ

一个yml文件居然能玩出这么多花样!

Protocol Buffers

Protocol Buffers是Google公司开发的一种数据描述语言。它的官网为:

https://github.com/google/protobuf

https://developers.google.com/protocol-buffers/

Tutorials:

https://developers.google.com/protocol-buffers/docs/tutorials

sudo apt install protobuf-compiler python-protobuf

这是一种注重效率,而可阅读性几乎为零的二进制格式。其效率超过BSON,但除非有相关格式文件,否则完全无法阅读。而BSON作为JSON的扩展,只有扩展的那部分不可读,其余部分仍保留JSON的可读性。

格式文件是Protocol Buffers中的重要概念,也是和JSON等格式在使用思路上最大的区别。

JSON采用的是,不同的语言提供不同的库来解析的方式。

而Protocol Buffers使用同一个格式文件,为不同语言生成相应的代码。这和CORBA的做法很类似。

与Protocol Buffers类似的方案,还有Facebook提出的Thrift、ZeroC提出的Slice和Hadoop Avro。Protocol Buffers只提供了序列化和反序列化技术,而后面这几个方案还包含了完整的客户端/服务端堆栈,可快速实现RPC。

test.proto:

message TestMsg
{
    required int32 id=1;
    required int32 time=2;
    optional string note=3;
}

protoc --python_out=./python/ test.proto

test.py:

import google.protobuf
from test_pb2 import TestMsg
import time

test = TestMsg()
test.id=1
test.time=int(time.time())
test.string="asdftest"
print test
test_str = test.SerializeToString()
print test_str

test1 = TestMsg()
test1.ParseFromString(test_str)
print test1

示例代码下载:

https://github.com/antkillerfarm/antkillerfarm_crazy/tree/master/helloworld/protobuf

http://www.cnblogs.com/o87481299/p/4199892.html

python google protobuf使用

https://mp.weixin.qq.com/s/D1bjGRCFH6Ag9_xIfQ34SA

Google Protocol Buffers浅析

https://mp.weixin.qq.com/s/dYV_O2WiiGeDHMbejt8vqg

高德地图数据序列化的探索与实践

https://mp.weixin.qq.com/s/enDUynhZ1Pnzg_4xEjR21A

浅谈Protobuf编码

https://zhuanlan.zhihu.com/p/149889589

Avro,Protocol Buffer和Thrift中的模式演化

proto3

Protocol Buffers本身也有若干版本,且互不兼容。目前用的比较多的是proto2和proto3。

值得注意的是,proto3生成的python文件,仍然叫xxxx_pb2.py。

proto3最大的改进在于支持如下形式的proto文件的嵌套:

import "tensorflow/core/framework/node_def.proto";

http://www.cnblogs.com/ghj1976/p/4565846.html

proto3笔记

https://blog.csdn.net/menghaocheng/article/details/80176763

Python3-如何使用protobuf 3

HDF是用于存储和分发科学数据的一种自我描述、多对象文件格式。HDF是由美国国家超级计算应用中心(NCSA)创建的,以满足不同群体的科学家在不同工程项目领域之需要。

https://support.hdfgroup.org/HDF5/

它的python接口:

http://www.h5py.org/

HDF5 for Python

https://www.phodal.com/blog/try-hdf5-in-mac-os-with-shell/

HDF5小试——高大上的多对象文件格式

https://mp.weixin.qq.com/s/dkPR4lEziyqwE_QsFht2Mw

大数据存储技巧

PMML(Predictive Model Markup Language) 是一个开放的工业标准,它以XML为载体将上述数据挖掘任务标准化,可以把某一产品所创建的数据挖掘方案应用于任何其它遵从PMML标准的产品或平台中,而不需考虑分析和预测过程中的具体实现细节。使得模型的部署摆脱了模型开发和产品整合的束缚,为商业智能产品、数据仓库和云计算中的数据挖掘模型的应用环境开拓了新的篇章。

http://dmg.org/

https://www.ibm.com/developerworks/cn/xml/x-1107xuj/

PMML标准介绍及其在数据挖掘任务中的应用

FlatBuffers

FlatBuffers是Google为嵌入式平台打造的二进制格式,执行效率优于Protocol Buffers。但它的出名,却是由于Facebook最早在其Android App上使用。因此,有的文章也将之称为是Facebook发明的,但其实这是不正确的。

https://google.github.io/flatbuffers/

http://www.cnblogs.com/wingyip/p/5185593.html

FlatBuffers初探

Thrift

https://thrift.apache.org/

sudo apt install libthrift-dev thrift-compiler

https://thrift.apache.org/tutorial/cpp.html

gRPC在Protocol Buffers的基础上提供了客户端/服务端堆栈。相当于是Thrift的等价物。

https://grpc.io/

https://grpc.io/docs/languages/cpp/quickstart/


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK