該項目有一個簡短的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消息可以包括來自多個標準中定義的多個模塊的數據,甚至相隔數年定義的標準。