PSON: A Serialization Format for IoT Sensor Networks
<p>PSON data header composed of both wire type (3 bits) and header payload (5 bits).</p> "> Figure 2
<p>PSON encoding example versus default JSON.</p> "> Figure 3
<p>ESP32 Serialization (S)/Deserialization (DS) speed.</p> "> Figure 4
<p>Arduino UNO Serialization (S)/Deserialization (DS) speed.</p> "> Figure 5
<p>ESP32 binary size increase.</p> "> Figure 6
<p>Arduino binary size increase.</p> "> Figure 7
<p>Protocol encoding sizes.</p> ">
Abstract
:1. Introduction
2. Data Serialization Formats
- JSON, JavaScript Object Notation. The European Computers Manufacturers Association, ECMA, published the ECMA-404 standard, “The JSON data interchange syntax”, whose latest update was the 2nd edition, published in 2017 [29]. This document presents the most recent version of the standardized JSON language. As defined in the document, “JSON is a lightweight, text-based, language-independent data interchange format. It was derived from the ECMAScript programming language, but is programming language independent. JSON defines a small set of structuring rules for the portable representation of structured data”. JSON is based on a subset of the JavaScript Programming Language Standard ECMA-262 3rd Edition published in December 1999, and it is a very stable data-interchange language that has had few modifications since it was first presented in 2001 on the JSON organization website [30]. This stability is complemented by the fact that it uses conventions similar to the C-family of languages, such as C, C++, C#, Java, JavaScript, Perl, and Python, making JSON one of the most widely used data serialization formats.
- BSON, Binary JSON. First developed by MongoBD [31] as a binary structure that encodes type and length information, BSON is currently maintained as an open binary-encoded serialization of JSON-like documents in [32], whose latest published specification version is 1.1. This document describes the three characteristics for which BSON was designed: “Lightweight, Keeping spatial overhead to a minimum; Traversable, was designed to be tranversed easily; Efficient, Encoding data to BSON and decoding from BSON can be performed very quickly in most languages due to the use of C data types.”
- Protocol Buffers, developed by Google as a mechanism for serialized structured data. Two versions have been published, Proto2 and Proto3, the specifications of which can be found in [33]. The most recent version of Protocol Buffers, proto3, supports generated code in Java, Python, Objective-C, Dart, Go, Ruby, and C#. The main objective of Protocol Buffers is to be a small, fast, and simple mechanism for data serialization and be language-neutral, platform-neutral, and extensible.
- XML, Extensible Markup Language. Developed by six different XML Groups [34], each dedicated to a different aspect of the Information and Knowledge Domain, W3C [35], Extensible Markup Language (XML) is a text format derived from SGML in ISO 8879, which was designed to meet the challenges of large-scale electronic publishing, but the file was extensively used in the exchange of a wide variety of data on the Web and elsewhere. Its first publication was in 1997, and since then, many different specifications, which can be found in [36], have been published.
- YAML, YAML Ai not Markup Language. Developed as an international collaboration, YAML resulted from the serialization format for Inline, Data::Denter module, developed by Ingy dot, and a simplification of XML, developed by Clark Evans and Oren Ben-Kiki. The first specification was published in 2001, and the current version is YAML 1.2, published in 2009. All of the specifications can be found in [37]. YAML was integrated and built upon concepts of C, Java, Perl, Python, Ruby, RFC0822 (MAIL), RFC1866 (HTML), RFC2045 (MIME), RFC2396 (URI), XML, SAX, and SOAP.
- MessagePack. Developed by Sadayuki Furuhashi in 2009, MessagePack is a binary serialization format that enables data exchange among multiple languages. Small integers are encoded into a single byte, and typical short strings require only one extra byte in addition to the strings themselves. There is only one specification, with the most recent update in 2017, which can be found in [38].
- Apache Thrift. Developed by Facebook, it was open sourced in 2007 and entered the Apache Incubator in 2008, becoming an Apache Top-Level Project (TLP) in 2010. It is rigorously maintained, and its latest release was published in March 2021. This and all previous releases since 2009 can be found in [39]. Apache Thrift allows reliable performance communication and data serialization across a variety of programming languages and use cases. The project team aimed for Thrift to embody several characteristics: Simplicity, with a simple and approachable code, free of unnecessary dependencies; Transparency, conforming to the most common idioms in all languages; Consistency, with niche, language-specific features in extensions, not the core library; and Performance, striving for performance first, elegance second.
- Apache Avro. Avro joined the Apache Software Foundation as a Hadoop subproject in 2009. Since then, it has been very intensively maintained, and more than thirty releases have been published, with the latest one being 1.10.2 in 2021. All versions can be found in [40]. This is a data serialization system that relies on schemas. When Avro data is read, the schema used when writing it is always present. This permits each datum to be written with no per-value overheads, which also allows its use with dynamic scripting languages since the data, together with their schema, are fully self-describing. The developer team indicates that Avro is intended to provide rich data structures; a compact, fast, binary data format; a container file to store persistent data; a remote procedure call (RPC); and simple integration with dynamic languages based on the fact that code generation is not required to read or write data files, nor do RPC protocols need to be implemented. For this reason, code generation is an optional optimization step and is only worth implementing for statically typed languages.
3. PSON: Thinger.io Data Serialization Format
- Unsigned: represents unsigned integers;
- Signed: represents signed integers;
- Float: represents both IEEE 754 simple and double precision;
- Discrete: represents discrete values, such as true, false, or null;
- String: represents a UTF-8 string;
- Bytes: represents a byte array;
- Map: represents key–value pairs of objects;
- Array: represents a sequence of objects.
- Represent small signed/unsigned integers (0–30);
- Indicate whether the floating point value is an IEEE 754 with simple or double precision;
- Discern between true, false, and nulls;
- Indicate the string size (up to 30 characters);
- Indicate the byte array size (up to 30 bytes);
- Indicate the number of elements in a map (up to 30 elements);
- Indicate the number of elements in an array (up to 30 elements).
4. Evaluation Methodology
- Attributes;
- Hardware;
- Libraries;
- Tests and Payloads.
4.1. Attributes
- Serialization/Deserialization speed. The values were measured per 1000 iterations and are expressed in microseconds.
- Binary size increase with the use of the library. This attribute is very important with memory-limited devices such as Arduino UNO and is necessary for its application in IoT devices.
- Encoding sizes. This attribute is very important when on a limited bandwidth network and, in consequence, for the scope of this study.
4.2. Hardware
Hardware Characteristics
- Flash memory, also called program space: where the compiled code is saved;
- SRAM: the memory where the variables and the dynamic code are loaded and read;
- CLK speed: the CPU clock speed.
- Flash memory: 32 KB;
- SRAM: 2 KB;
- CLK speed: 16 MHz.Arduino UNO has very limited memory to store the program and the variables, so some of the performed tests only work on ESP32.
- Flash memory: 1310 KB;
- SRAM: 327 KB;
- CLK speed: 240 MHz.
4.3. Libraries
- JSON: ArduinoJson. Library: https://arduinojson.org/ (accessed on: 19 February 2021). Version used: 6.18.0
- MessagePack: ArduinoJson. Library: https://arduinojson.org/ (accessed on: 19 February 2021). Version used: 6.18.0
- Protocol Buffers: NanoPB. Library: https://github.com/nanopb/nanopb (accessed on: 19 February 2021). Version used: 0.4.5
- Protoson: Pson. Library: https://github.com/thinger-io/Protoson (accessed on: 19 February 2021). Version used: https://github.com/thinger-io/Protoson/commit/60537257cb52a5a16ad2e5444226ebab82a7ceb1
- XML: TinyXML2. Library: https://github.com/leethomason/tinyxml2 (accessed on: 19 February 2021). Version used: 8.0.0
- BSON: MiniBSON. Library: https://github.com/cyberguijarro/minibson (accessed on: 19 February 2021). Version used: https://github.com/cyberguijarro/minibson/commit/3a460446245b17ffc3947f02a079b2232cef973a
- Avro: Apache Avro. This library was not used on the microcontrollers because there are currently no implementations for it. They were implemented in Java and executed on a computer in order to obtain the serialized object and measure its size for serialization and deserialization. For this reason, the tests with this library only contain data on sizes. The associated code can be found in the theoretical-tests folder.
- Thrift: Apache Thrift. This library was not used on the microcontrollers because there are currently no implementations for it. They were implemented in Java and executed on a computer in order to obtain the serialized object and measure its size for serialization and deserialization. For this reason, the tests with this library only contain data on sizes. The associated code can be found in the theoretical-tests folder.
- YAML. This library was not used on the microcontrollers because there are currently no implementations for it. They were implemented in Java and executed on a computer in order to obtain the serialized object and measure its size for serialization and deserialization. For this reason, the tests with this library only contain data on sizes. The associated code can be found in the theoretical-tests folder.
4.4. Tests and Payloads
- Serialization/Deserialization speed. The tests used to measure this attribute were performed by using 10 different payloads and checking the time needed to serialize and deserialize them.
- Binary size increase with the use of the library. The tests used to measure this attribute were performed using a reference code (code-without-library folder) to measure the binary size generated when not using any library. Then, the code from the binary-size-tests folder was loaded on each microcontroller, and the binary size increment was calculated.
- Encoding sizes. This attribute is very important when on a limited bandwidth network and, in consequence, for the scope of this study. The tests used to measure this attribute were performed by using 10 different payloads and checking the generated serialized object size.
- Test01
{ "sensor":"gps", "time":1351824120, "data":[ 48.75, 2.3 ] }
- Test02
{ "sensor":"This is a very long string. This is a very long string. This is a very long string. This is a very long string. This is a very long string. ", "time":1351824120, "data":[ 48.75, 2.3 ] }
- Test03
{ "sensor":"This contains a lot of keys.", "sensor2":"This contains a lot of keys.", "sensor3":"This contains a lot of keys.", "sensor4":"This contains a lot of keys.", "sensor5":"This contains a lot of keys.", "sensor6":"This contains a lot of keys.", "sensor7":"This contains a lot of keys.", "time":1351824120, "data":[ 48.75, 2.30 ] }
- Test04
{ "data":[ 48.75, 2.3, 3.01, 5.4, 6.7, 4.3, 10.01, 10.01 ] }
- Test05
{ "bool":true }
- Test06
{ "neg":-2 }
- Test07
{ "pos":1 }
- Test08
{ "double":1.03 }
- Test09
{ "string":"test" }
- Test10
{ "string":"test", "double":1.03, "long":1351824120, "pos":1, "neg":-2, "bool":true, "array":[ 48.75, 2.3 ] }
5. Research Results
5.1. Serialization/Deserialization Speed
5.2. Binary Size Tests
- Arduino: 592 bytes;
- ESP32: 260,710 bytes.
- Arduino: 32,256 bytes;
- ESP32: 1310,720 bytes.
5.3. Encoding Sizes
6. Conclusions and Future Work
Author Contributions
Funding
Institutional Review Board Statement
Informed Consent Statement
Data Availability Statement
Conflicts of Interest
References
- Agiwal, M.; Roy, A.; Saxena, N. Next generation 5G wireless networks: A comprehensive survey. IEEE Commun. Surv. Tutor. 2016, 18, 1617–1655. [Google Scholar] [CrossRef]
- Fortino, G.; Savaglio, C.; Spezzano, G.; Zhou, M. Internet of Things as System of Systems: A Review of Methodologies, Frameworks, Platforms, and Tools. IEEE Trans. Syst. Man Cybern. Syst. 2020, 51, 223–236. [Google Scholar] [CrossRef]
- Bockelmann, C.; Pratas, N.K.; Wunder, G.; Saur, S.; Navarro, M.; Gregoratti, D.; Vivier, G.; De Carvalho, E.; Ji, Y.; Stefanović, Č.; et al. Towards massive connectivity support for scalable mMTC communications in 5G networks. IEEE Access 2018, 6, 28969–28992. [Google Scholar] [CrossRef]
- Popovski, P.; Trillingsgaard, K.F.; Simeone, O.; Durisi, G. 5G wireless network slicing for eMBB, URLLC, and mMTC: A communication-theoretic view. IEEE Access 2018, 6. [Google Scholar] [CrossRef]
- Li, Z.; Uusitalo, M.A.; Shariatmadari, H.; Singh, B. 5G URLLC: Design challenges and system concepts. In Proceedings of the IEEE 2018 15th International Symposium on Wireless Communication Systems (ISWCS), Lisbon, Portugal, 28–31 August 2018; pp. 1–6. [Google Scholar]
- Farhad, A.; Kim, D.H.; Kim, B.H.; Mohammed, A.F.Y.; Pyun, J.Y. Mobility-Aware Resource Assignment to IoT Applications in Long-Range Wide Area Networks. IEEE Access 2020, 8, 186111–186124. [Google Scholar] [CrossRef]
- Liberg, O.; Sundberg, M.; Wang, E.; Bergman, J.; Sachs, J.; Wikström, G. Cellular Internet of Things: From Massive Deployments to Critical 5G Applications; Academic Press: Cambridge, MA, USA, 2019. [Google Scholar]
- Li, S.; Da Xu, L.; Zhao, S. 5G Internet of Things: A survey. J. Ind. Inf. Integr. 2018, 10, 1–9. [Google Scholar] [CrossRef]
- Mekki, K.; Bajic, E.; Chaxel, F.; Meyer, F. A comparative study of LPWAN technologies for large-scale IoT deployment. ICT Express 2019, 5, 1–7. [Google Scholar] [CrossRef]
- Al-Fuqaha, A.; Guizani, M.; Mohammadi, M.; Aledhari, M.; Ayyash, M. Internet of things: A survey on enabling technologies, protocols, and applications. IEEE Commun. Surv. Tutor. 2015, 17, 2347–2376. [Google Scholar] [CrossRef]
- Ghose, D.; Froytlog, A.; Li, F.Y. Reducing overhearing energy in wake-up radio-enabled WPANs: Scheme and performance. In Proceedings of the 2018 IEEE International Conference on Communications (ICC), Kansas City, MO, USA, 20–24 May 2018; pp. 1–6. [Google Scholar]
- Chaudhari, B.S.; Zennaro, M. LPWAN Technologies for IoT and M2M Applications; Academic Press: Cambridge, MA, USA, 2020. [Google Scholar]
- Gligorić, N.; Dejanović, I.; Krčo, S. Performance evaluation of compact binary XML representation for constrained devices. In Proceedings of the IEEE 2011 International Conference on Distributed Computing in Sensor Systems and Workshops (DCOSS), Barcelona, Spain, 27–29 June 2011; pp. 1–5. [Google Scholar]
- Pereira, F.; Correia, R.; Pinho, P.; Lopes, S.I.; Carvalho, N.B. Challenges in Resource-Constrained IoT Devices: Energy and Communication as Critical Success Factors for Future IoT Deployment. Sensors 2020, 20, 6420. [Google Scholar] [CrossRef] [PubMed]
- Liang, B.; Xie, J.; Shi, J.; Wang, W. Design and implementation of three-phase inverter for microgrid research. J. Tianjin Norm. Univ. (Natl. Sci. Ed.) 2018, 38, 59–63. [Google Scholar]
- Raj, J.S. QoS optimization of energy efficient routing in IoT wireless sensor networks. J. ISMAC 2019, 1, 12–23. [Google Scholar] [CrossRef]
- Kurs, A.; Karalis, A.; Moffatt, R.; Joannopoulos, J.D.; Fisher, P.; Soljačić, M. Wireless power transfer via strongly coupled magnetic resonances. Science 2007, 317, 83–86. [Google Scholar] [CrossRef] [PubMed] [Green Version]
- Na, W.; Park, J.; Lee, C.; Park, K.; Kim, J.; Cho, S. Energy-efficient mobile charging for wireless power transfer in Internet of Things networks. IEEE Internet Things J. 2017, 5, 79–92. [Google Scholar] [CrossRef]
- Rana, M.M.; Xiang, W. IoT communications network for wireless power transfer system state estimation and stabilization. IEEE Internet Things J. 2018, 5, 4142–4150. [Google Scholar] [CrossRef]
- Muni, T.V.; Pranav, A.S.; Srinivas, A.A. IoT based smart battery station using wireless power transfer technology. Int. J. Sci. Technol. Res. 2020, 9, 2876–2881. [Google Scholar]
- Diamantoulakis, P.D.; Papanikolaou, V.K.; Karagiannidis, G.K. Optimization of Ultra-Dense Wireless Powered Networks. Sensors 2021, 21, 2390. [Google Scholar] [CrossRef] [PubMed]
- Zeadally, S.; Shaikh, F.K.; Talpur, A.; Sheng, Q.Z. Design architectures for energy harvesting in the Internet of Things. Renew. Sustain. Energy Rev. 2020, 128, 109901. [Google Scholar] [CrossRef]
- Nadeem, A.; Hussain, M.; Iftikhar, A.; Aslam, S. Narrowband IoT Device To Device Pairing Scheme To Save Power. In Proceedings of the 2020 IEEE 23rd International Multitopic Conference (INMIC), Bahawalpur, Pakistan, 5–7 November 2020; pp. 1–5. [Google Scholar]
- Park, J.; Bhat, G.; Nk, A.; Geyik, C.S.; Ogras, U.Y.; Lee, H.G. Energy per operation optimization for energy-harvesting wearable IoT devices. Sensors 2020, 20, 764. [Google Scholar] [CrossRef] [PubMed] [Green Version]
- Proos, D.P.; Carlsson, N. Performance comparison of messaging protocols and serialization formats for digital twins in IoV. In Proceedings of the IEEE 2020 IFIP Networking Conference (Networking), Paris, France, 22–26 June 2020; pp. 10–18. [Google Scholar]
- Naik, N. Choice of effective messaging protocols for IoT systems: MQTT, CoAP, AMQP and HTTP. In Proceedings of the 2017 IEEE International Systems Engineering Symposium (ISSE), Vienna, Austria, 11–13 October 2017; pp. 1–7. [Google Scholar]
- Álvaro Luis. Thinger-io/Protoson. 2020. Available online: https://github.com/thinger-io/Protoson (accessed on 10 May 2021).
- Luis Bustamante, A.; Patricio, M.A.; Molina, J.M. Thinger. io: An Open Source Platform for Deploying Data Fusion Applications in IoT Environments. Sensors 2019, 19, 1044. [Google Scholar] [CrossRef] [PubMed] [Green Version]
- Ecma International. The JSON Data Interchange Syntax, 2nd ed.; Standard ECMA-404; 2017; Available online: https://www.ecma-international.org/publications-and-standards/standards/ecma-404/ (accessed on 10 May 2021).
- JSON.org. Introducing JSON. Available online: https://www.json.org/json-en.html (accessed on 10 May 2021).
- MongoDB. MongoDB. Available online: https://www.mongodb.com/es (accessed on 10 May 2021).
- MongoDB. BSON. Available online: https://bsonspec.org/ (accessed on 10 May 2021).
- Google. ProtocolBuffers. Available online: https://developers.google.com/protocol-buffers (accessed on 10 May 2021).
- W3C. XMLGroups. Available online: https://www.w3.org/XML/ (accessed on 10 May 2021).
- W3C. W3C. Available online: https://www.w3.org/ (accessed on 10 May 2021).
- W3C. XML. Available online: https://www.w3.org/XML/Core/#Publications (accessed on 10 May 2021).
- YAML. Available online: https://yaml.org/start.html (accessed on 10 May 2021).
- MessagePack. MessagePack. Available online: https://msgpack.org/ (accessed on 10 May 2021).
- Apache. Thrift. Available online: https://thrift.apache.org/ (accessed on 10 May 2021).
- Apache. Avro. Available online: https://avro.apache.org/ (accessed on 10 May 2021).
- Committee, D.S. The DWARF Debugging Standard. Available online: http://dwarfstd.org/Home.php (accessed on 19 February 2021).
- Wolnikowski, A.; Ibanez, S.; Stone, J.; Kim, C.; Manohar, R.; Soulé, R. Zerializer: Towards zero-copy serialization. In Proceedings of the Workshop on Hot Topics in Operating Systems, Ann Arbor, MI, USA, 1–3 June 2021; pp. 206–212. [Google Scholar]
Header | Value | ||
---|---|---|---|
Wire Type | Header Payload | Binary Representation | |
Unsigned | Unsigned integer up to or to signal an upcoming varint. | 0 0 0 [P P P P P] | LEB128 if integer is greater than |
Signed | Signed integer up to or to signal an upcoming varint. | 0 0 1 [P P P P P] | LEB128 if integer is greater than |
Floating Point | to indicate that the floating point is single precision. | 0 1 0 [0 0 0 0 0] | Stores a floating point number in IEEE 754 single-precision floating point number (fixed to 32 bits) |
Floating Point | to indicate that the floating point is double precision. | 0 1 0 [0 0 0 0 1] | Stores a floating point number in IEEE 754 double-precision floating point number (fixed to 64 bits) |
Discrete | to indicate False | 0 1 1 [0 0 0 0 0] | N/A |
Discrete | to indicate True | 0 1 1 [0 0 0 0 1] | N/A |
Discrete | to indicate Null | 0 1 1 [0 0 0 1 0] | N/A |
String | Unsigned integer up to to indicate the string size, or to signal an upcoming varint to specify the size. | 1 0 0 [P P P P P] | LEB128 if string length is greater than |
UTF-8 String | |||
Bytes | Unsigned integer up to to indicate the byte array size, or to signal an upcoming varint to specify the size. | 1 0 1 [P P P P P] | LEB128 if byte array length is greater than or equal to |
Binary data | |||
Map | Unsigned integer up to to indicate the number of elements present in the map, or to signal an upcoming varint to specify the size. | 1 1 0 [P P P P P] | LEB128 if byte array length is greater than |
Map Data | |||
Array | Unsigned integer up to to indicate the number of elements present in the array, or to signal an upcoming varint to specify the size. | 1 1 1 [P P P P P] | LEB128 if byte array length is greater than |
Array Data |
Protocol | Format | Library | Header only | Static Memory | Library Size (Not Compiled) |
---|---|---|---|---|---|
JSON | JSON | ArduinoJSON | yes | yes | 227,185 bytes |
MsgPack | MsgPack | ArduinoJSON | yes | yes | 227,185 bytes |
ProtocolBuffers | ProtocolBuffers | Nano PB | no | yes | 42,000 bytes |
Protoson | Protoson | Protoson | yes | yes | 31,294 bytes |
XML | XML | TinyXML2 | yes | yes | 151,373 bytes |
BSON | BSON | MiniBSON | yes | yes | 18,152 bytes |
Apache Avro | This library was not used on the microcontrollers and was tested in Java | ||||
Apache Thrift | This library was not used on the microcontrollers and was tested in Java | ||||
YAML | This library was not used on the microcontrollers and was tested in Java |
Protocol | Test01 | Test02 | Test03 | Test04 | Test05 | Test06 | Test07 | Test08 | Test09 | Test10 | Average |
---|---|---|---|---|---|---|---|---|---|---|---|
JSON S | 28,767 | 116,705 | 188,648 | 33,814 | 7602 | 6865 | 6708 | 10,350 | 11,082 | 51,759 | 46,230 |
JSON DS | 36,577 | 90,513 | 115,070 | 41,774 | 9132 | 8481 | 8033 | 11,032 | 10,809 | 74,032 | 40,545.3 |
BSON S | 123,806 | 140,927 | 427,762 | 256,979 | 31,812 | 31,846 | 31,837 | 32,081 | 32,020 | 250,959 | 136,002.9 |
BSON DS | 76,403 | 86,572 | 264,767 | 159,726 | 19,020 | 19,092 | 19,083 | 19,114 | 19,090 | 153,429 | 83,629.6 |
MsgPack S | 15,875 | 31,524 | 47,345 | 20,153 | 4714 | 4819 | 5085 | 5597 | 5737 | 26,417 | 16,726.6 |
MsgPack DS | 16,677 | 68,870 | 100,840 | 14,366 | 4394 | 4047 | 4034 | 5427 | 7330 | 33,787 | 25,977.2 |
Protocol Buffers S | 16,487 | 45,835 | 117,739 | 11,449 | 4931 | 6347 | 5093 | 5403 | 5986 | 27,574 | 24,684.4 |
Protocol Buffers DS | 24,162 | 32,412 | 59,527 | 13,952 | 6286 | 10,642 | 6216 | 6360 | 7152 | 41,606 | 20,831.5 |
PSON S | 8854 | 23,372 | 40,624 | 9364 | 2627 | 2632 | 2617 | 3387 | 3676 | 14,637 | 11,179 |
PSON DS | 13,011 | 13,618 | 29,044 | 15,432 | 3578 | 5726 | 4318 | 4225 | 4500 | 23,119 | 11,657.1 |
XML S | 127,529 | 119,323 | 240,721 | 193,044 | 55,073 | 54,538 | 54,506 | 55,618 | 55,504 | 184,497 | 114,035.3 |
XML S | 163,530 | 177,467 | 313,182 | 257,228 | 80,087 | 79,212 | 79,159 | 81,217 | 81,216 | 242,851 | 155,514.9 |
Protocol | Test01 | Test02 | Test03 | Test04 | Test05 | Test06 | Test07 | Test08 | Test09 | Test10 | Average |
---|---|---|---|---|---|---|---|---|---|---|---|
JSON S | 1,685,840 | - | - | 3,890,896 | 118,868 | 150,172 | 147,008 | 539,372 | 165,756 | 2,539,444 | 1,154,669.5 |
JSON DS | 633,272 | - | - | 776,852 | 133,652 | 128,432 | 122,884 | 179,188 | 169,768 | 1,240,716 | 423,095.5 |
BSON S | - | - | - | - | - | - | - | - | - | - | - |
BSON DS | - | - | - | - | - | - | - | - | - | - | - |
MsgPack S | 299,712 | - | - | 407,748 | 77,536 | 79,980 | 83,780 | 94,592 | 96,824 | 528,548 | 208,590 |
MsgPack DS | 325,988 | - | - | 285,564 | 85,656 | 80,604 | 80,632 | 106,908 | 141,716 | 647,048 | 219,264.5 |
Protocol Buffers S | - | - | - | - | - | - | - | - | - | - | - |
Protocol Buffers DS | - | - | - | - | - | - | - | - | - | - | - |
PSON S | 189,648 | - | - | 195,420 | 50,688 | 52,536 | 52,632 | 65,096 | 73,408 | 325,940 | 125,671 |
PSON DS | 471,604 | - | - | 427,496 | 86,000 | 314,908 | 122,880 | 99,216 | 99,776 | 973,368 | 324,406 |
XML S | - | - | - | - | - | - | - | - | - | - | - |
XML S | - | - | - | - | - | - | - | - | - | - | - |
Publisher’s Note: MDPI stays neutral with regard to jurisdictional claims in published maps and institutional affiliations. |
© 2021 by the authors. Licensee MDPI, Basel, Switzerland. This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution (CC BY) license (https://creativecommons.org/licenses/by/4.0/).
Share and Cite
Luis, Á.; Casares, P.; Cuadrado-Gallego, J.J.; Patricio, M.A. PSON: A Serialization Format for IoT Sensor Networks. Sensors 2021, 21, 4559. https://doi.org/10.3390/s21134559
Luis Á, Casares P, Cuadrado-Gallego JJ, Patricio MA. PSON: A Serialization Format for IoT Sensor Networks. Sensors. 2021; 21(13):4559. https://doi.org/10.3390/s21134559
Chicago/Turabian StyleLuis, Álvaro, Pablo Casares, Juan J. Cuadrado-Gallego, and Miguel A. Patricio. 2021. "PSON: A Serialization Format for IoT Sensor Networks" Sensors 21, no. 13: 4559. https://doi.org/10.3390/s21134559
APA StyleLuis, Á., Casares, P., Cuadrado-Gallego, J. J., & Patricio, M. A. (2021). PSON: A Serialization Format for IoT Sensor Networks. Sensors, 21(13), 4559. https://doi.org/10.3390/s21134559