数据持久化
数据持久化形式 数据持久化 是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称.
据持久化对象的基本操作有:保存、更新、删除、加载、查询等
01.数据库
DBM(Database Manager)
02.文件系统和序列化
普通文件无格式写入
普通序列化写入
03.存储和检索数据
二进制持久化
--序列化和反序列化
--索引
索引(index)和消息存储(message store)
数据被持久化到耐久性存储,例如本地磁盘文件系统或对象存储服务 存储介质上的数据形态可能是文本、数据库、二进制文件等。
文件存储(File Storage)是一种将数据以文件的形式存储在存储介质上的方法
对象存储(Object Storage)是一种将数据作为对象进行存储的方法
块存储
持久化方式:
数据库 持久化 关系型数据库 非关系型数据库
文件系统 持久化 文本文件 二进制文件
缓存 持久化数据 Redis、Memcached。
数据流 持久化数据 Apache Kafka、Apache Flink
消息队列 持久化数据 RabbitMQ、Apache Kafka
parquet
Parquet文件格式选用 thrift完成文件元数据的序列化和反序列化。
在parquet-format项目的thrift目录下,文件parquet.thrift详细定义了parquet文件的元数据类型
https://github.com/apache/parquet-format/blob/master/src/main/thrift/parquet.thrift
这个系统为了解决什么问题?为此提供了什么功能?
Python标准库提供了一个dbm模块。它允许用户使用键值对存储和检索数据,工作原理类似于字典,但不同之处在于它将数据存储在磁盘上,而不是在内存中
dbm模块相当于一个微型数据库
存储资源
序列化与反序列化
是 数据持久化和网络传输中经常使用的技术
JDK Serializable是Java自带的序列化框架 Java内置序列化框架
Kryo 一个快速有效的Java二进制序列化框架
Hessian 是caucho公司开发的轻量级RPC(Remote Procedure Call)框架 不是采用IDL来定义数据和服务,而是通过自描述来完成服务的定义
Avro 通过Schema定义数据结构
Protocol buffer是一种语言中立、平台无关、可扩展的序列化框架,需要预先定义Schema的
###
Protobuf(Protocol Buffers)和Thrift都是高性能、跨语言的序列化框架
Protobuf 是 Google 开发的
Thrift 是 Facebook 开发,并于2008年加入Apache的跨语言服务开发框架
thrift格式
xml,json,protobuf,thrift
Thrift 通过一个中间语言(IDL, 接口定义语言)来定义RPC的接口和数据类型,然后通过一个编译器生成不同语言的代码
Thrift实际上是实现了C/S模式,通过代码生成工具将接口定义文件生成服务器端和客户端代码,从而实现服务端和客户端跨语言的支持
protocol协议层和 transport传输层,
protocol(协议层, 定义数据传输格式,可以为二进制或者XML等)和transport(传输层,定义数据传输方式,可以为TCP/IP传输,内存共享或者文件共享等)被用作运行时库。
需要定义一个xxx.thrift的文件, 来生成各种语言的代码,生成之后我们的服务提供者和消费者,都需要把代码引入,
服务端把代码实现,消费者直接使用API的存根,直接调
过程:
创建thrift IDL文件、 第一步:通过IDL定义数据结构和服务
编译生成Java代码、 第二步:利用代码生成工具生成代码
使用TSerializer和TDeserializer进行序列化和反序列化。 第三步:编写你的业务逻辑
protobuf 在生成类中已经内置了序列化与反序列化方法, 而 Thrift 需要单独调用内置序列化器来进行编解码。
thrift
thrift 编译器下载
python版本:Python 3.7.1
pip3 install thrift
编写Thrift IDL文件
生成的 python 代码 和 文件
典型 RPC 的使用场景中,包含了服务发现、负载、容错、网络传输、序列化等组件
保留历史版本的方法
“Copy on Write”(写入时复制)
持久化框架(英语:persistence framework)
参考
https://downloads.apache.org/
https://downloads.apache.org/thrift/
thrift在ubuntu上的安装步骤 https://www.yisu.com/ask/14538610.html
数据持久化 https://docs.python.org/zh-cn/3.9/library/persistence.html