我正在研究一個項目,該項目最終將涉及總計數十億個字段的Java對象,並且一些後臺計算表明,標準序列化技術將很快變得難以處理(例如20個演出JSON文件)。有沒有其他可供選擇的技術?有沒有一種標準/發達的方式來序列化Java類,以便在C++中使用而不使用XML或JSON等標記格式?
回答
看看protocol buffer 如果你有對象的集合,並且你不希望單個消息(比如一個大的XML),它可能會工作。
可以定義一些ASN.1語法和代碼/使用共同編碼規則即DER,PER等
這種靈活的符號在通過TCP最常用的協議,如LDAP中使用解碼數據。它可能是溝通不同平臺的最有效方式,但您必須學習一些asn.1基礎知識並定義語法。然後在Java和C++中實現marshallers/unmarshallers。
你可以嘗試ASN.1(是的,我知道別人認爲這已經在這裏,但我有一些額外的信息添加)。由於您關心的是數據的大小,請注意,電話運營商使用ASN.1來處理他們的CDR(呼叫數據記錄)以處理電話呼叫(無論是通過陸上線路還是移動電話)。他們將數百或數千個通話記錄捆綁到一條傳送到他們計費中心的消息中。
我的建議是使用最初爲航空業設計的PER(壓縮編碼規則),因爲它們需要儘量減少空對地通信中的帶寬。 PER隨後被移動電話行業所採用,目前它是許多3G和4G協議的一部分。
PER的目標是避免通過雙方通信雙方都知道的信息。例如,如果一個字段具有固定長度,則不需要在消息中發送該長度。如果一個值有一個範圍,例如5000到5007,那麼只有8個可能的值,所以只有3個比特被用來表示該值。這是PER實現這種緊湊性的一部分。
最後,使用優秀的ASN.1工具使您無需關心上一段中提到的細節。所有你需要做的就是創建描述你想要交換的信息的ASN.1規範(這很容易做 - 見ASN.1 Made Simple),選擇你的編程語言(C,C++,Java,C#是一些常用的,但也有一些ASN.1工具可用),然後使用ASN.1編譯器爲您生成序列化器/解串器引擎。請注意,因爲ASN。1本身獨立於您使用的編程語言,您可以輕鬆地使用C++進行序列化,並使用Java進行反序列化,反之亦然。
你可以找到ASN.1工具列表(一些免費的,一些商業)以下網址:http://www.itu.int/ITU-T/asn1/links/index.htm
非常感謝,我有很多想想哈哈。 – pg1989 2012-03-23 17:23:08
- 1. 有沒有一種標準的方式來描述JSON格式的數據,類似於SOAP的WSDL文件?
- 2. 有沒有一種標準的方式來將std :: string轉換爲std :: chrono :: time_point而不使用Boost?
- 3. 有沒有一種標準的方式來顯示HTML元標記中的合格都柏林核心元?
- 4. 有沒有一種方法來反序列化我的JSON而不使用每個項目的包裝類?
- 5. 有沒有一種標準化的方式來向rss添加位置數據?
- 6. 有沒有使用JavaScript和JQuery序列化JSON的標準方法?
- 7. Java使用哪種序列化格式?
- 8. 標準化的方式來序列化JSON查詢字符串?
- 9. 是否有一種「標準」方式來開發這樣的應用程序?
- 10. JSON來以標準化形式以csv
- 11. 有沒有一種標準的方式來執行findfirst,使用stl在linux上使用gcc進行findnext?
- 12. 有沒有一種標準的方式來訂閱使用播客應用程序的飼料?
- 13. 有沒有一種等同的方式來從XML加載GMenu?
- 14. 有沒有一個標準的代碼,它可以格式化電話號碼爲一些「標準格式」
- 15. 有沒有一種方法可以完全格式化C#double?
- 16. 有沒有一種'標準'的方式來使用依賴注入與Java - 具體與JAXRS澤西島
- 17. 有沒有一種方法來序列化一個C#類到XML而無需在類上放置屬性?
- 18. Epicor有沒有一種標準的方式在客戶端記錄消息
- 19. 有沒有一種標準的方式來存儲python中的XY數據?
- 20. PHP中有沒有另一種方式使用表單而不使用複選標記或單選按鈕來發送數據?
- 21. 二進制格式化 - 類型用戶控件沒有標記爲可序列
- 22. Javascript的基本知識 - 有沒有一種方法來重用代碼而不使用標準功能?
- 23. 有沒有一種簡單的方法來檢查對象是否可以在python中使用JSON序列化?
- 24. C或C++有一個標準的正則表達式庫嗎?
- 25. 使用Moment.js標準化日期格式
- 26. 有沒有一種標準的方法來檢測方向性?
- 27. 有沒有一個標準的方式來做'actorFor orElse actorOf`?
- 28. 有沒有一種標準的方法來驗證Web API的應用程序?
- 29. 有沒有一種標準的方式讓Perl在內存不足時運行?
- 30. C++有以下類型的循環或某種方式來使用模板嗎?
你肯定會需要兩個流序列化和轉移。 20演出?讓人驚訝。 – Perception 2012-03-20 19:54:26
幾十億*字段?即使所有這些都是「int」,我們都在談論幾千兆字節的數據(10億次32位= 3.7吉比特)。你*可以*通過丟棄冗餘(這也意味着錯誤檢測/修正!),永久性獨立性,漂亮性等來相當大地減少空間需求,但它不是靈丹妙藥。 – delnan 2012-03-20 19:57:39
承租人...你想要一種「標準化」的方式在兩種語言之間進行非常差的數據交換,這兩種語言無法正常工作,並且能夠很好地協同工作。 – 2012-03-20 20:08:43