该项目有一个简短的Protobuf-Delphi,并从Java的协议缓冲区中移植了项目代码的某些部分。当时,与其他实施相比,在我看来,这个项目似乎更清晰。
解析和代码生成的项目正在建设中。现在,我们已经转到了代码生成的阶段。您可以发送代码样本和愿景。愿望肯定会被考虑和欢迎。
当Google上传时,将协议缓冲区的源代码上传到开源。我对其背后的想法,数据的紧凑性及其效率,其处理速度感到惊讶,尤其是与XML相比。
Delphi港口的第一个版本是在我的主要工作项目中于2007年编写的。我必须将带有数据的大表转移到客户端应用程序中。这个操作很慢。任务是以某种方式提高工作速度。并减少通过HTTPS从服务器发送到客户端应用程序的流量。在此之前,将XML用于相同的目的。
在完成协议缓冲区数据格式的过渡之后,可以下载更多数据并显着提高生产率。
很快,建立了Delphi的端口,功能限制。低级协议抽象实现了,没有代码生成。但这并不能阻止我们在网络服务中使用它,并且实现的功能足以适合该项目。
知道消息的结构,可以在此协议上发送和接收数据。一年后,我将代码放在网站上https://sourceforge.net/p/protobuf-delphi。
大概有许多人会发现在磁盘和程序内部存储使用很有趣。
如果您知道协议缓冲区中数据物理存储的功能,则可以做有趣的事情。
在记录开始时,有一个存储记录长度的字段。您也可以始终跳过不必要的记录字段。根据它们具有固定长度的类型或字段的长度可变,则该字段的开始将包含该字段的长度。因此,很容易将记录彼此分开,有时跳过记录的不必要部分很有用。
例如,树上的数据可以通过B-Tree结构或Hashmap索引。这使您可以快速随机访问您正在寻找的记录。
阅读过程可以应用于单个包装记录。
这种格式的数据具有显着的压缩。与对象在内存中的通常存储相比:
在我们的项目中,我们节省了大量的内存消耗。与存储普通对象相比。在某些情况下,增益是20次或更多次,而不会损失数据访问速度。如果数据是不可变的,这特别有用。
类似的格式用于工业DBMS中的物理数据存储。
也就是说,在熟练的手中,这种数据格式是一件有力的事情。
顺便说一句,当然,并非所有这种格式的所有内容都是Google的发明。相反,Google几乎没有发明。
恕我直言的腿从ASN.1格式中生长出来。当我看到这种格式的文档时,我很惊讶它们匹配了多少。
Google最重要的优点在推广此数据格式并在开源中发布源代码。
ASN.1在目的上是相似的,与协议缓冲区和Apache升级相似,它们也是跨平台数据序列化的接口描述语言。像这些语言一样,它具有架构(在ASN.1中,称为“模块”),以及一组编码,通常是type-Length-galue编码。但是,1984年定义的ASN.1早于很多年。它还包括多种基本数据类型,其中一些已经过时,并且有更多的可扩展性选择。单个ASN.1消息可以包括来自多个标准中定义的多个模块的数据,甚至相隔数年定义的标准。