scieee Science in your language
[en] (orig)
sensors

Article
Pushing the Scalability of RDF Engines on IoT
Edge Devices †
Anh Le-T uan 1,2, * , Conor Hayes 2 , Manfred Hauswirth 1,3 and Danh Le-Phuoc 1
1 Open Distributed Systems, T echnical University of Berlin, 10587 Berlin, Germany;
[email protected] .de (M.H.); [email protected] (D.L.-P .)
2 Insight Centre for Data Analytics, National University of Ir eland Galway , H91 TK33 Galway , Irel and;
conor [email protected]
3 Fraunhofer Institute for Open Communication Systems, 10589 Berlin, Germany
* Correspondence: [email protected]
†
This paper is an extended version of our paper published in Le-T uan, A., Hayes, C., W ylot, M. and Le-Phuoc,
D. RDF4Led: an RDF engine for lightweight edge devices. in proceedings of the 8th International
Conference on the Internet of Things, Santa Barbara, 15–18 October 2018.
Received: 21 February 2020; Accepted: 9 May 2020; Published: 14 May 2020
     
  

Abstract:
Semantic inter operability for the Internet of Things (IoT) is enabled by standards and
technologies fr om the Semantic W eb. As r ecent resear ch suggests a move towards decentralised
IoT ar chitectures, we have investigated the scalability and r obustness of RDF (Resource Description
Framework)engines that can be embedded thr oughout the architectur e, in particular at edge nodes.
RDF pr ocessing at the edge facilitates the deployment of semantic integration gateways closer to
low-level devices. Our focus is on how to enable scalable and robust RDF engines that can operate
on lightweight devices. In this paper , we have first carried out an empirical study of the scalability
and behaviour of solutions for RDF data management on standar d computing hardwar e that have
been ported to run on lightweight devices at the network edge. The findings of our study shows that
these RDF stor e solutions have several shortcomings on commodity ARM (Advanced RISC Machine)
boar ds that are r epresentative of IoT edge node har dware. Consequently , this has inspir ed us to
intr oduce a lightweight RDF engine, which comprises an RDF storage and a SP ARQL pr ocessor for
lightweight edge devices, called RDF4Led. RDF4Led follows the RISC-style (Reduce Instruction Set
Computer) design philosophy . The design constitutes a flash-awar e storage structure, an indexing
scheme, an alternative buf fer management technique and a low-memory-footprint join algorithm
that demonstrates impr oved scalability and robustness over competing solutions. W ith a significantly
smaller memory footprint, we show that RDF4Led can handle 2 to 5 times more data than popular
RDF engines such as Jena TDB (T uple Database) and RDF4J, while consuming the same amount of
memory . In particular , RDF4Led requir es 10%–30% memory of its competitors to operate on datasets
of up to 50 million triples. On memory-constrained ARM boards, it can perform faster updates and
can scale better than Jena TDB and V irtuoso. Furthermor e, we demonstrate considerably faster query
operations than Jena TDB and RDF4J.
Keywords: Internet of Things; edge device; the semantic web; RDF engine
1. Introduction
The Internet of Things (IoT) pr oposes to connect a vast amount of everyday devices (“things”)
to the Internet to enable innovative and smarter domestic and commercial services [
1
]. These devices
range fr om physical objects [
2
] such as smart phones, smart watches, environmental sensors to virtual
objects [
3
], such as tickets and agendas. In fact, any online service that has a unique identifier and
Sensors 2020 , 20 , 2788; doi:10.3390/s20102788 www .mdpi.com/journal/sensors

Sensors 2020 , 20 , 2788 2 of 32
is accessible on the Internet may be connected as a “thing” to the network. The heter ogeneity of
devices, services and r equirements has driven major r esearch initiatives to accelerate the r eal-life
deployment of IoT technologies [
4
]. In 2019, Gartner [
5
] r eported that 4.81 billion IoT devices were
active, and pr edicted that the number would reach 5.1 billion by the end of 2020. In 2018, nearly two
and a half exabytes of data wer e generated every day [
6
]. However , it was also observed that 80%
of companies lacked skills and technology to make sense of the data provided by the IoT devices [
7
].
Consequently , a clear challenge is how to make the best use of the huge amount of information
available fr om IoT networks.
It has long been r ecognised that standards for the integration and analysis of data must play a
key r ole in the value generated by IoT [
8
]. The Semantic W eb, known as an extension of the W orld
W ide W eb, aims to allow data to be interoperable over the W eb [
9
]. Semantic technologies have been
pr oposed to deal with data heterogeneity and to enable service inter operability in the IoT domain [
10
],
and to underpin r esource discovery , reasoning and knowledge extraction [
11
]. Recent resear ch has seen
the development and deployment of ontologies to describe sensors, actuators and sensor readings [
12
],
semantic engines [
13
] and semantic r easoning agents [
14
]. These efforts have constituted important
milestones towar ds the integration of heterogeneous IoT platforms and applications
The Resour ce Description Framework (RDF) (see Section 2 ) is now the preferr ed data model
for semantic IoT data [
15
,
16
] and RDF engines have been used as semantic integration gateways on
the IoT [
17
]. While existing centralised or cloud solutions of fer flexible and scalable options to deal
with dif ferent degr ees of data integration [
13
], in the context of IoT , a cloud infrastructur e as a single
pr ocessing node may lead to network latency issues [
18
]. In fact, dir ectly pushing IoT data to the
cloud may have several disadvantages because it is estimated that only 10% of pr eprocessed IoT
data is worth saving for analysis [
7
], as most of the intermediate data can be discarded immediately .
As br oadband networks have more downstr eam bandwidth than upstream bandwidth, lar ge uploads
of raw sensor data, for example, may quickly dominate upstr eam network traffic.
Furthermor e, real-time IoT applications may suf fer due to the resulting network latency between
cloud and end-user devices. As such, it has been proposed that a decentralised integration paradigm
fits better with the distributed nature of autonomous deployments of smart devices [
19
]. The idea
is that moving the RDF engine closer to the edge of the network, and to the sensor nodes and IoT
gateways, will r educe network overhead/bottlenecks and enable flexible and continuous integration
of new IoT devices/data sour ces [ 20 ].
Thanks to r ecent developments in the design of embedded hardwar e, e.g., ARM (Advanced RISC
Machine) boar ds [
21
], lightweight computers have become cheaper , smaller and mor e powerful.
For example, a Raspberry Pi Zero [
22
] or a C.H.I.P computer [
23
] costs less than 15 Eur os and is
comparable in size to a cr edit card. Such devices are powerful enough to run a fully-functional Linux
distribution that ar e efficient in power consumption. Their small size makes them easier to deploy
or embed in other IoT devices (e.g., sensors and actuators), which pr ovides reasonable computing
r esources. Furthermore, they can be placed on the network edge, as edge devices , i.e., data-pr ocessing
gateways that interface with outer networks. For example, such an integration gateway device may be
used for an outdoor ad-hoc sensor network. This gateway can be easily fitted into a lamp pole on a
str eet or at a traffic junction, sharing a power sour ce powered by a small solar panel.
Despite their advantages in power consumption, size and cost-effectiveness, lightweight edge
devices ar e significantly under-equipped in terms of the memory and CPU for supporting r egular RDF
engines. Of the 100 billion ARM chips shipped so far [
24
] and even much mor e in the coming future,
only a small fraction, e.g., 0.1%, will need a special class of RDF engine optimised for this environment.
Nevertheless, this still equates to 100 million devices, which motivated us to design and build an RDF
engine optimised for the har dware constraints of lightweight edge devices.
Lightweight edge devices ar e differ ent from standar d computing hardwar e in two major ways:
(i) They have significantly smaller main memory and (ii) they ar e equipped with lightweight
flash-based storage as secondary memory . T o manage large static RDF datasets, the standard

Sensors 2020 , 20 , 2788 3 of 32
stand-alone or cloud-based RDF engines apply sophisticated indexing mechanisms that consume
a lar ge amount of main memory and are expensive to update. Our empirical study (see Section 3 )
shows that applying the same appr oach on resour ce-constrained devices causes high amounts of
page faults or out-of memory err ors, which heavily penalises system performance. Flash memory
devices ar e smaller in size, lighter , mor e shock resistant and consume much less power than
computers with disks or HDD. However , the I/O behaviour of flash-based storage, especially the
erase-befor e-write limitation [
25
], degrade the ef ficiency of disk-based data indexing structures and
caching mechanisms [ 26 ]. The majority of existing RDF engines do not cater for storage of this kind.
Inspir ed by the RISC design (Reduced Instruction Set Computer) of ARM computing boards,
in this paper we introduce a RISC-style appr oach similar to [
27
] to address these shortcomings and
others found by our empirical study . In contrast to [
27
], we focus on minimising memory consumption,
scalability (maximising data pr ocessing) and processing performance. Our approach is based on
a r edesign of the storage and indexing schemes in order to optimise flash I/O. This has led to an
impr oved join algorithm with significantly lower memory consumption. As a r esult, our RDF engine,
RDF4Led, has a small code-footprint (4MB) and outperforms RDF engines such as Jena TDB and
RDF4J. The experiments in Section 8 show that RDF4Led r equires less than 30% of the memory used
by competing RDF engines when operating on the same scale of data.
In summary , our contributions ar e as follows:
1.
W e intensively study the scalability of the PC-based RDF engines running on IoT lightweight
edge devices.
2.
W e introduce a RISC-Style RDF engine design based on observations drawn fr om an empirical
study of the performance of PC-based RDF engines running on lightweight edge devices.
3.
W e develop a flash-friendly indexing data structur e, a flash-friendly buffer management technique
and a low-memory-footprint join algorithm to store and query RDF data on lightweight IoT
edge devices.
4.
W e implement our prototype in Java, and evaluate it to show the performance gains of our appr oach.
This paper is structur ed as follows: In Section 2 , we present the fundamentals of the RDF
data model, provide a short intr oduction to SP ARQL queries, and describe how to build and
RDF storage and how to query RDF data. Section 3 investigates the performance of RDF engines
on standar d hardwar e when they are ported to run on the lightweight edge devices without
optimisations. Then we introduce our RISC-style appr oach to build an RDF engine for lightweight
edge devices, called RDF4Led, and overview its architectur e in Section 4 . In the following sections,
we pr esent in detail the design of our flash-aware storage and our new indexing structur e (Section 5 ),
buf fer management (Section 6 ) and the algorithm for dynamically computing joins (Section 7 ).
In Section 8 , we discuss the r esults of our evaluation of RDF4Led against other engines on differ ent
types of devices. Finally , in Section 9 , we present our conclusions and an outlook for futur e work.
2. Background
2.1. RDF and SP ARQL
The Resour ce Description Framework (RDF) is a graph-based data model that has been developed
for the r epresentation of pr operties and relationships of web r esources. Initially , the development of
RDF intended to contribute to the Semantic W eb [
9
], however , its usage is now much wider than that.
RDF is a pr omising standard to r epresent IoT data which usually r efers to attributes of the phenomena
observed by things and the r elations among the things.
RDF pr esents data by using statements in a similar way to using natural language to express
facts. A statement is given as a triple consisting of a subject, a pr edicate, and an object. The subject
denotes an entity , the pr edicate denotes a property (r elation), and the object denotes an entity or a
value. Put simply , a triple states that a subject has a relation to the object or a subject has an attribute

Sensors 2020 , 20 , 2788 4 of 32
whose value is the object. Listing 1 presents an RDF example describing a wind sensor W01 and its
observations, i.e., ":windSensorW01 is a sensor which observes wind speed" and ":windSensorW01 measur ed
the wind speed to be 30km/h at timestamp 2019-10-03T08:04:50" . In the example, the RDF triples are
r epresented in T urtle—a standard format for serialising RDF data. RDF can also be serialised in other
standar d formats like RDF/XML or JSON-LD.
Listing 1: An example of RDF statements (in T urtle format) describing a wind speed sensor and a wind
speed observation.
1 . :windSensorW01 a sosa : Sensor ;
2 . sosa : observes : windSpeedRate ;
3 . sosa : madeObservation : winspeedObs01 .
4 . : winspeedObs01 sosa : observedProperty : windSpeedRate ;
5 . sosa : hasSimpleResult " 3 0 k m / h " ;
6 . sosa : resultTime " 2 0 1 9 - 1 0 - 0 3 T 0 8 : 0 4 : 5 0 " ^ ^ xsd : dateTime .
Accor ding to the RDF standard, in an RDF triple, the subject is an International Resource Identifier
(IRI) to denote a named entity , or a blank node to express an anonymous entity . The pr edicate is always
an IRI and the object can be an IRI, a blank node or a literal. As a consequence, ther e are two types of
RDF triples: literal triples for describing an entity’s pr operty and RDF links for denoting a relationship
of two entities. In Listing 1 , the triples in line 5 and line 6 are literal triples which contain RDF literals
as their objects. RDF literals can be basic or complex, e.g., integer , float or datetime, to define the values
such as string, number or time. RDF links, on the other hand, consist of three IRIs. The pr edicate IRI
connecting two entities has a type to describe the r elationships between two things. These types ar e
defined in ontologies. For example, triples in line 1-4 are RDF links, and the r elationships are defined
in the SSN ontology [
28
]. Hence, an RDF dataset or an RDF Graph is a set of RDF triples
<
s, p, o
> ∈
(I ∪ B) × I × (I ∪ B ∪ L), where I, B and L ar e sets of IRIs, blank nodes and literals.
Listing 2: An example of a SP ARQL query that r eturns the strongest wind speed in each day of month.
1 . PREFIX rdf : <http://www.w3.org/1999/02/22-rdf-syntax-ns # >
2 . PREFIX sosa : <http://www.w3.org/ns/sosa/>
3 .
4 . SELECT ?sensor ?month ?day ( max ( ?windSpeed ) as ?maxWindSpeed )
5 .
6 . WHERE
7 . {
8 . ?sensor a sosa : Sensor ;
9 . sosa : observes : winspeedObs01 ;
1 0 . sosa : madeObservation ?winObs .
1 1 . ?winObs sosa : hasSimpleResult ?windSpeed
1 2 . sosa : resultTime ?time .
1 3 . }
1 4 . GROUP BY ?sensor ( month ( ?time ) as ?month ) ( day ( ?time ) as ?day )
SP ARQL is a query language which was developed to query RDF datasets. Since RDF is a
graph-based data model, SP ARQL is designed as a graph-matching query language. SP ARQL queries
include graph query patterns, conjunctions, disjunctions and optional patterns as formalised in [
29
].
This ability is essential for semantic integration of heter ogeneous data. SP ARQL also supports
aggr egations, filters, limits and federation, etc. Listing 2 shows an example SP ARQL query Q to
sear ch for the highest wind speed per day in a month measured by wind speed sensors.
A SP ARQL query is of the form H
←
B, wher e B, the body of the query , is an RDF graph query
pattern matched against an RDF graph, and H, the head of the query , defines how to construct the

Sensors 2020 , 20 , 2788 5 of 32
answer of the query [
29
]. In Listing 2 , the body of Q is the text from line 8 to line 12. The graph
query pattern of query Q is the matching condition to sear ch for the RDF subgraphs containing the
information of wind speed sensors and their observations. A matched subgraph is similar to an
RDF graph pr esented in previous example (Listing 1 ). The head of Q in line 4 indicates that the max
aggr egation is applied on the found wind speed values grouped by sensors, days and months.
A graph query operation is performed by matching the variables in its query pattern. In practice,
this operation is expr essed as a query pattern that is composed of triple patterns and joining matched
triples. A triple pattern is also a variation of an RDF triple in which
s
,
p
,
o
can be variables. A set
of triple patterns is called a basic graph pattern (BGP) and can be modelled as a dir ected graph.
A BGP can have dif ferent shapes (e.g., a star shape, linear shape, snowflake shape and complex shape)
which influences the performance of graph matching operations [ 30 ].
2.2. Storing and Querying RDF Data
T o deal with the data heterogeneity , IoT data can be annotated with RDF by semantic gateways [
31
]
or semantic information br okers [
17
]. The pr ocess of mapping IoT data into RDF , known as
“semantisation”, consists of thr ee steps: collecting sensor data, enriching the raw data and generating
RDF statements to semantically annotate the data [
15
]. Therefor e, it is essential to manage the RDF
data generated fr om the IoT mediator nodes efficiently .
The goal of RDF data management is to facilitate effici ent storage and query processing of RDF
data. RDF data management has r eceived considerable attention within the Semantic W eb community .
As a r esult, ther e are many works focusing on RDF storage and SP ARQL query processing [
32
]. An RDF
engine, which contains an RDF storage and a SP ARQL processor , can be classified into two types:
non-native RDF engine and native RDF engine.
A non-native RDF engine is built on top of a traditional database management system [
32
].
For example, 3stor e [
33
] and Oracle [
34
] use components of a r elational database management system
to build their RDF storage and SP ARQL query processor . In these systems, RDF statements are
stor ed in a single table of three columns corr esponding to three constituents of an RDF statement
(
s
,
p
,
o
). An index is added to each column to speed up lookup operations. This appr oach, known as
the triple-table appr oach, scales poorly due to many self-joins over this single, possibly very large
table when executing complex queries [
35
]. Therefor e, the so-called “property table technique” was
intr oduced to reduce the number of self-joins. Here, RDF statements ar e stored in many tables and
each table includes a subject and several pr edicates. Ther efore, triples that have the same subject can
be r etrieved without an expensive join operation. Sesame [
36
], Jena2 [
37
] ar e among the RDF engines
using this appr oach. An alternative to the property table appr oach was suggested in SW -Stor e [
38
]
which or ganises RDF datasets in two-column tables. Each table contains the subject and object of
the triples which have the same pr edicate. The tables ar e stored in the column-oriented database
C-stor e [
39
]. Moreover , ther e have been several works to store RDF data in distributed database systems
and in cloud infrastructur es. For example, Jena-HBase [
40
] integrates Jena and Apache Hadoop [
41
],
wher eas AMADA [ 42 ] is an RDF data management platform based on Amazon W eb Services.
A native RDF engine, on the other hand, is designed and optimised from scratch to manage
RDF data. Instead of adapting RDF concepts into the concepts that are native to the underlying
database systems, a native RDF engine is fully optimised for persisting and querying RDF data.
Naturally , the design of native RDF storage is heavily influenced by traditional database design.
For example, V irtuoso [
43
] or 4Store [
44
] stor e RDF statements in a table-like structure. In these
systems, RDF data is presented as “RDF quads” consisting of 4 elements: subject, predicate, object
and graph id (or model in 4Stor e). Each of these attributes can be indexed in differ ent ways to
impr ove query execution performance. Other RDF systems, e.g., Y ARS(Y et Another RDF Store) [
45
],
Hexastor e [
46
] and RDF-3X [
27
], employ index-permuted storage systems. In particular , the string
r epresentations of RDF r esources ar e replaced with unique integers. Indexes ar e built on the
shorter encoded values and cover all major accesses types to triple query patterns. As the RDF

Sensors 2020 , 20 , 2788 6 of 32
data model is a graph data model, it was also suggested to store and pr ocess RDF data by graph
data structur es and algorithms. The systems following the graph-based idea include T ripleT [
47
],
DOGMA [
48
], Diplodocus [
49
]. However , many graph algorithms are known to be complex in terms
of implementation and optimisation.
Most of these solutions for RDF data management focus on scalability in dataset size and query
complexity for standar d computer hardwar e and cloud infrastructures equipped with lar ge main
memory and multiple disks. Their ef ficiency and scalability is achieved by choosing appr opriate index
structur es and join techniques for large main memory machines [
50
], wher eas, IoT edge devices are
characterised by small memory and flash-based secondary storage.
Our pr evious results [ 51 , 52 ] have
alr eady indicated that, on the resour ce-constrained computers, these engines suffer fr om performance
issues, pointing to the requir ement to build a customised RDF data management for this type of
devices. There have been several ef forts to move RDF data processing to small devices. For instance,
Mobile RDF [
53
], a lightweight RDF framework, provides simple APIs for cr eating, parsing and
serialising RDF data. However , RDF graph modifications are not supported (no update functionality).
Andr oJena [
54
] is an adoption of Jena that of fers all functionalities of the original Jena framework.
However , the implementation of Andr oJena has ignored the fact that RDF data pr ocessing on
r esource-constrained devices has dif ferent r equirements which r esults in significant scalability issues.
The second version of RDF On-The-Go [
55
], which was our first ef fort to build a native RDF storage
for Andr oid OS, can store up to 5 million triples on a common har dware configuration Andr oid
phone. T wo recent notable works ar e the W iselib tuplestore [
56
] and
µ
RDF Stor e [
57
] designed for very
constrained memory devices which ar e intended to store only a few thousands of RDF triples.
3. Empirical Study
In the curr ent state of the art, many RDF engines can manage billion to trillion triple datasets [
32
].
T o achieve this scale, these RDF engines must be executed on powerful computers equipped with
hundr eds of GBs of RAM and many CPUs. Clearly , these approaches suf fer fr om performance
drawbacks on r esource-constrained IoT edge devices. In addition, these RDF engines are optimised for
storage and querying of lar ge, heter ogeneous, and rather static RDF datasets, whereas IoT data is mor e
dynamic and less heter ogeneous. In this section, we study the performance drawbacks of RDF engines
that wer e directly ported to run on lightweight edge devices. The findings of this study are the input
for the design of our RDF engine optimised for lightweight IoT edge devices pr esented in Section 4 .
The empirical study is conducted in a simulated scenario of a weather data management system
specifically cr eated for the IoT domain. T o enable semantic interoperability in this IoT system,
the weather data is described in RDF and can be queried with SP ARQL. In the IoT domain, RDF is
often used to semantically annotate the metadata of IoT platforms, systems and devices such as the
location of an IoT device or the specifications of sensors deployed on an IoT platforms; the metadata
of observations such as types of the observations or units of the measur ement; and observation
timestamps and actual r eadings.
T raditionally , an IoT system that manages semantic weather data can be deployed in a centralised
fashion with a 3-layer ar chitecture. At the lowest layer , the IoT devices are the wir eless sensors or
actuators deployed to collect environment data such as temperatur e, humidity , etc. The collected data
can be transmitted wir elessly to the second layer via a number of wir eless protocols. The middle layer
consists of the IoT gateways functioning as the pr otocol translators that transmit the collected data to
the upper layer . V ia long-range wir ed or wireless networks, the data then can be transferr ed to the
thir d layer which can be powerful servers or cloud infrastructures. At the third layer , the collected
data can be mapped to RDF . This layer can also provide SP ARQL endpoints to allow users to query
the RDF data.
However , it is argued that to r educe the network traffic, to scale up the system, and to support
r eal-time operation, the data should be prepr ocessed (i.e., annotated, aggregated and filter ed) and
queried on the IoT gateways themselves [
31
]. This means that RDF engines for these gateway devices

Sensors 2020 , 20 , 2788 7 of 32
must exist and be ef ficient on their hardwar e. Hence, the raw data can be mapped to RDF and can
be queried by using SP ARQL query from the middle layer . In this study , we set up RDF engines
on r esource-constrained single boar d computers that are r epresentative of IoT gateway har dware
configurations. W e use sensor readings fr om the Integrated Surface Database (ISD) of the National
Climate Data Center (NCDC) as sample data. The data is mapped to RDF and is stored locally on
these devices. On each device, for each RDF engine, we test how much RDF can be stored and how
fast the data can be inserted and queried. The details of the hardwar e configurations of our testing
devices, RDF engines, RDF schema, testing SP ARQL queries and the experiments are pr esented in the
following sections.
3.1. Hardware Devices
Recent technological advances of embedded pr ocessors have increased the pr ocessing capabilities
of IoT edge devices. Based on their computational capabilities, IoT devices can be categorised into
low-end devices and high-end devices. The low-end IoT devices which are very constrained in terms of
ener gy , CPU (less than 100MHz), and memory capacity (less than 100 kB) resour ces. Popular examples
of devices in this category include Ar duino [
58
], Zolertia [
59
], OpenMote node [
60
], etc. The second
category consists of high-end IoT devices which include single-boar d computers such as Intel
Galileo [
61
], Raspberry Pi [
62
], Beagle Bone boar d [
63
] or smartphones. They have enough resour ces
and adequate capabilities to run softwar e based on traditional operating systems such Linux or BSD
(Berkeley Softwar e Distribution).
W e conduct our empirical study on five types of high-end IoT devices: Intel Galileo Gen II (GII),
Raspberry Pi Zer o W (RPi0), Raspberry Pi 2 version B (RPi2), Raspberry Pi 3 (RPi3), and Beagle Bone
Black (BBB). They wer e chosen because of their popularity and thus proof of concept in the IoT domain.
Furthermor e, they are good r epresentatives of r esour ce constraints of IoT gateways. The configurations
of each device used in the experiments ar e summarised in T able 1 .
T able 1. Hardwar e configurations of the devices used in the experiments.
Device GII RPi 0 BBB RPi2 RPi3
Cost 65 EUR 15 EUR 55 EUR 35 EUR 45 EUR
CPU
model Quark ARM A8 ARM 11 ARM A7 ARM A53
freq. 0.4 GHz 1.0 GHz 1.0 GHz 900 MHz 1.2 GHz
n cores 1 1 1 4 4
RAM 256 MB 512 MB 512 MB 1 GB 1 GB
Storage T ranscend MicroSD 16GB class 10 (40 MB/s)
OS Y octo 1.4 Poky Rasp. Lite Debian 7.0 Rasp. Lite Rasp. Lite
Linux Distribution
The Intel Galileo [
61
] was developed by Intel and was the first IoT device that could run a complete
Linux system. The Intel Galileo was designed as to be Arduino-compatible which enables Arduino
sensors and actuators to be used out of-the-box. Therefor e, it can be considered to be composed of
two sets of har dware components, i.e., the Ar duino hardwar e and the “mini PC” hardwar e. The Intel
Galileo is equipped with RAM, Flash memory , a mini SD car d reader , an Ethernet adaptor and a Intel
Quark x86 CPU. Galileo came out in two versions, Gen 1 Intel Galileo Gen 2 Intel Galileo, which ar e
very similar with the Gen 2 boar ds having some improved har dware. In the experiments we use only
Galileo Gen 2 har dware.
BeagleBoar d [
63
] was originally developed and intr oduced by T exas Instruments in 2008.
By using the OMAP3530 system-on-a-chip technology , the BeagleBoard boar d is a good platform for
various demonstration scenarios in the IoT world and it was r egarded as a giant step to bring the
micr ocontrollers to a fully-fledged micr ocomputer . BeagleBone Black is a small cr edit card-sized boar d

Sensors 2020 , 20 , 2788 8 of 32
that was launched in 2013 at a price of 55 EUR. Despite its small size and low cost, the BeagleBone
Black is equipped with 512 MB RAM, a 1 GHz clock ARM Context-A8 processor and 2 GB eMMC
flash memory .
The Raspberry Pi [
62
] is another well-known, low-cost type of single board computer that was
developed by the University of Cambridge. The Raspberry Pi Zero was intr oduced in 2015 and features
an ARM Cortex A8 single core CPU with 1.0 GHz and 512 MB RAM. In 2017, the Raspberry Pi Zer o W
was launched, a newer version of the Pi Zer o with W i-Fi and Bluetooth capabilities. The Raspberry Pi
2, which is mor e powerful than Pi Zero, has an ARM Cortex A7 CPU with a 0.9 GHz CPU cycles/cor e,
quad-cor es, and 1 GB of RAM. The Raspberry Pi 3 is equipped with a 1.2 GHz 64-bit quad-cor e ARM
Cortex-A53 pr ocessor , with 512 KB shared L2 cache, and 1 GB of RAM. The Raspberry Pi runs Raspbian
OS, a fr ee operating system based on Debian Linux and optimised for the Raspberry Pi hardwar e.
Despite the availability of 64-bit CPUs on Raspberry Pi 3, at the time this work was done, Raspbian OS
with 64-bit has not r eleased yet.
3.2. RDF Engines
W e selected three RDF engines that can be set up on the above devices: Apache Jena, RDF4J and
V irtuoso. The technical specifications of each engine used in this study ar e reported in T able 2 .
T able 2. Characteristics of the RDF engines used in the experiments.
T echnical Characteristics
Developed in Backend DB File Access Data Structure V ersion
Language
Jena TDB Java native store File Caching B + tree 3.14.0
LRU Cache
RDF4J Native Store Java native store n/a BT ree 3.1.0
V irtuoso Open-Source C++ row stor e n/a B + T ree 6.1.8
Apache Jena [
64
] is a well-known open-sour ce framework for RDF data pr ocessing implemented
in Java. T o support persistent RDF storage, Apache Jena provides a native RDF storage called Jena
TDB (T uple Database). Jena TDB stor es RDF terms (nodes) in a node table and employs multiple
indexes for RDF triples. The data in the node table and the indexes ar e organised on fixed length
key and fixed length value B
+
T rees. Jena TDB is able to operate on both 32-bit and 64-bit systems.
However , it performs better on a 64-bit machine because its caching mechanism requir es more memory .
On a 32-bit JVM, the size of dataset might be limited because Java addressing cannot gr ow beyond
1.5 GB. T o deal with this limitation, TDB employs an in-heap LRU cache of B
+
T ree blocks. Thus, it is
r ecommended to configure JVM with at least 1GB for Jena TDB to achieve the suf ficient performance.
RDF4J [
65
](formerly Sesame [
36
]) is another RDF data pr ocessing framework implemented
in Java and is available as open-sour ce software. Native Store is the persistent RDF storage of
RDF4J. In addition, this component communicates with other stores via SAIL API (Storage and
Infer ence Layer). Native Stor e is designed to support medium datasets (e.g., 100 million triples)
on common har dware. It uses dir ect disk I/O and employs on-disk indexes to speed up queries.
Again, B-T rees ar e used for indexing RDF statements and each RDF statement is stored in multiple
indexes. By default, the Native Store uses two indexes: subject-pr edicate-object-context(spoc) and
pr edicate-object-subject-context. Indexes can be added or dr opped on demand to speed up querying
or saving disk space.
V irtuoso [
66
] is developed by OpenLink Softwar e Inc, and is available both as an open-source and
a commer cial version. Dif ferent fr om the other engines, V irtuoso uses a r elational database back-end
storage to store RDF , and is implemented in C++. V irtuoso is well-known as a traditional r elational

Sensors 2020 , 20 , 2788 9 of 32
database supporting RDF data and as a SP ARQL-to-SQL solution to manage RDF data. The older
version of V irtuoso stores RDF data in a r ow-wise format storage. Meanwhile, column-wise format
storage has been adopted since version 7. In a row-based storage, RDF datasets ar e stored as collections
of RDF quads that consist of graph ids, subjects, predicates and objects in a single table. Fr om version
7, V irtuoso only operates on 64-bits OS. Thus, we have compiled and set up the V irtuoso 6 open-source
version in the evaluation.
3.3. Weather Dataset and RDF Schema
As mentioned above, we use the ISD (Integrated Surface Dataset) dataset [
67
] as the sample dataset
for our experiments. The ISD dataset is one of the most prominent weather datasets that contains
weather observations collected fr om 20 thousand weather stations from all over the world since
1901. The observations include the measurements such as temperatur e, wind speed, wind angle, etc.
Additionally , the observations also contain the timestamps when these measur ements were made.
T o describe the metadata of the weather stations such as location, deployed sensors and the
observation in RDF , we use the Semantic Sensor Network (SSN) ontology , the Quantity Kinds and
Units (QUDT) ontology , as well as Geo Name (GeoNames) and Basic Geo (WGS84). Figure 1 illustrates
a sample of the RDF schema used to describe the metadata of the weather stations in the ISD dataset.
dul:hasLocation
rdf:type
sosa:hosts
:station/001001
sosa:Platform
rdf:type
sosa:observes
sosa:isHostedBy
:sensor/001/temp
rdf:type
sosa:isObservedBy
rdfs:label
:T emperature
"temperature"
dul:hasLocation
snn:hasProperty
:foi/temp/loc/001001
sosa:ObservableProperty sosa:Sensor
geo:name
wgs84:Point
:location/001001
wgs84:lat wgs84:lon
:point/001001
xsd:double xsd:double xsd:String sosa:FeatureOfInterest
rdf:type

Figure 1. The RDF schema describing the weather stations in the ISD dataset.
In the ISD dataset, each weather station is assigned a unique station ID. Thus, to cr eate a unique
IRI to r efer to a weather station, we concatenate a unique prefix and the station ID. For example,
the IRI station:001001 is used to r efer to the weather station 001001. Following the specification
of the SSN ontology , a weather station is described as a platform that hosts multiple sensors or
devices. For instance, the IRI station:001001 is described to have type sosa:Platform and host a sensor
whose r esource is sensor:001/temp . The location of the station is described by using GeoNames and
WGS84. The class sosa:ObservablePr operty is used to define the phenomenon and property that a
sensor can observe. For instance, the resour ce :T emperatur e refers to an observable pr operty which is
the temperatur e. The temperatur e sensor sensor:001/temp is described as a sosa:sensor that observes
the :T emperatur e .
The RDF schema of a sensor r eading is shown in Figure 2 . A r esource r eferring to a sensor
r eading is described as an observation by using the sosa:Observation class. The type of the observation
is expr essed by using the sosa:observedProperty pr operty . Defining an observation and its type is
similar to how a sensor and its observable phenomenon. For example, the temperature observation
Observation/001 is defined as a sosa:Observation whose observed pr operty is T emperature . The timestamp
of an observation is defined by using the Date and T ime data type of the XML Schema Definition
Language(XSD) and assigned to the observation with the predicate sosa:r esultT ime . The actual r eading
fr om an observation is described with the predicate sosa:hasSimpleResult or mor e explicitly with the

Sensors 2020 , 20 , 2788 10 of 32
pr edicate sosa:hasResult . In this example, the unit of the temperatur e reading is pr esented in Celsius
degr ee. Furthermore, the sosa:Featur eOfInter est vocabulary is used to enhance the expressiveness of an
observation. For instance, the observation in the example is known as a temperature observation at
location location/001 . W ith this RDF schema, appr oximately 80–90 RDF triples are r equired to map an
observation fr om the ISD dataset to RDF .
sosa:observes
Sensor/001/T emperature
FoI/T emp/Loc1 T emperature
sosa:hasSimpleResult
sosa:resultTime
rdf:type sosa:hasResult
Observation/001
rdf:type
qudt-1-1:unit
qudt-1-1:numericV alue
rdf:type
Result/001/
sosa:Result
rdfs:literal
qudt-unit-1-1:DegreeCelsius
qudt-1-1:QuantityV alue
sosa:Observation xsd:dateTime
rdfs:literal
sosa:hasFeatureOfInterest
sosa:ObservedProperty sosa:isFeatureOfInterestOf
sosa:madeBySensor
sosa:madeObservation

Figure 2. The RDF schema of observations.
The queries used in the experiments wer e created following the design of the W A TDIV
benchmark [
30
] to test the performance of each SP ARQL query processor against dif ferent
shapes of BGP . Eleven query templates were cr eated and can be found in our Github repository
( https://github.com/anhlt18vn/sensor2020 ). The query templates are categorised into thr ee groups:
linear(L), star (S) and snowflake (F). The BGPs of the query templates in the linear gr oup contain
multiple low degr ee join triple patterns, whereas, the BGPs in the star -shaped queries are composed of
single high degr ee join triple patterns. The snowflake-shaped queries have a mix of low degr ee joins
and high degr ee joins.
3.4. Experiment Design
W e evaluated the selected RDF engines with three experiments. First, we test the update
thr oughput of each engine on each device. As presented in our scenario, on the high-end devices,
these RDF engines may serve for embedded semantic data management that supports the semantic
gateway services [
31
] or semantic information br okers [
17
] ar chitectural styles. Hence, they are
r equired to deal with dynamic data flows fr om the sensors. Then, we test the query response time.
Finally , we measure the memory consumption of the RDF engines when these engines perform storing
and querying operations.
Figur e 3 depicts the setup of our experiments. The ISD data is r ead and mapped into RDF with
the RDF schema described in Section 3.3 by the ISD-2-RDF W rapper . The pr ocesses of inserting and
querying the generated RDF data to/from the RDF Engine ar e managed by the RDF Data Insert and
Query Monitor . This component is also responsible for r ecording the performance of these pr ocesses.
The complete sour ce code of the implementation of our experiments can be found in our Github
r epository ( https://github.com/anhlt18vn/sensor2020 ).

Sensors 2020 , 20 , 2788 11 of 32
RDF Data Insert and
Query Monitor
RDF Engine
ISD-2-RDF
W rapper
ISD data
Experiment Results
RDF Schema

Figure 3. Setup of the RDF data insertion and querying experiments.
Exp1—Update thr oughput:The first experiment is to test how much new data the system
can incr ementally update with a certain underlying RDF store corr esponding to each hardwar e
configuration. W e simulate a process of data gr owth by gradually adding more data to the system.
W e measure the rate of inserting data (triples/s) and query r esponse time the until the system crashes
or until the speed is below 80 triples/s (whichever happened first). If the system cannot update
80 triples/s that means it is not able to update one observation/s. W e extract data from 25 weather
stations fr om the ISD dataset in the last six months of the year 2019. The number of the observations is
appr oximately 600 thousands, and the size of the generated RDF dataset is about 50 million RDF triples.
Exp2—Query evaluation: In the second experiment, we test the query response times of each
engine. On each device, we choose the dataset with a scale which all the engines can store. For each
dataset, fr om each query template, we generate 100 queries. W e recor d the maximum, the minimum
and the average time that these engines need to answer each type of query . The generated queries for
each dataset ar e 1100 (11 query templates) in total.
Exp3—Memory consumption: In the third experiment, we measur e the memory consumption
of thr ee system configurations, when they perform the insertion and query . The experiment runs
the queries r epeatedly and recor ds the maximum memory heap that the operating system allocates.
Note that the memory consumption is device-independent. T o evaluate the impact of the data size on
memory consumption, the test is conducted on the Raspberry Pi 3 with ten dif ferent sized datasets and
10 set of queries according to each dataset. The scale ranges from 5 million triples to 50 million triples.
3.5. Experiment Report and Findings
Figur e 4 illustrate the results of
Exp1
, in which we measur ed the update throughput of V irtuoso,
Jena TDB and RDF4J on five types of the lightweight computing devices. On GII, RPi0 and BBB, none of
the RDF engines could finish inserting the dataset of 50 million RDF triples. They crashed in the middle
of the test due to an “out of memory” err or . For instance, on GII (see Figur e 4 a), V irtuoso was able to
insert 9 million RDF triples, Jena TDB and RDF4J stopped after inserting 5 million RDF triples. Due to
the similar har dware settings, the scalability behaviours of these RDF engines on RPi0 (see Figur e 4 b)
and on BBB (see Figur e 4 c) were similar . On both devices, V irtuoso could store 40 million RDF triples,
wher eas Jena TDB and RDF4J were only able to stor e 20 million RDF triples. On the other hand, on the
RPi2 and RPi3, with mor e powerful computational capabilities, all three RDF engines could finish the
test and stor e up to 50 million RDF triples (see Figure 4 ).

Sensors 2020 , 20 , 2788 12 of 32
0 1 23 4 56789 10
0
250
500
750
Storage Size (in million triples)
Throughput (triples/sec)
JenaTDB RDF4J V irtuoso
( a )
0 5 10 15 20 25 30 35 40 45 50
0
500
1,000
1,500
2,000
Storage Size (in million triples)
Throughput (triples/sec)
JenaTDB RDF4J V irtuoso
( b )
0 5 10 15 20 25 30 35 40 45 50
0
500
1,000
1,500
2,000
Storage Size (in million triples)
Throughput (triples/sec)
JenaTDB RDF4J V irtuoso
( c )
0 5 10 15 20 25 30 35 40 45 50
0
500
1,000
1,500
2,000
Storage Size (in million triples)
Throughput (triples/sec)
JenaTDB RDF4J V irtuoso
( d )
0 5 10 15 20 25 30 35 40 45 50
0
500
1,000
1,500
2,000
Storage Size (in million triples)
Throughput (triples/sec)
JenaTDB RDF4J V irtuoso
( e )
Figure 4.
Inserting throughput test r esults of Jena TDB, RDF4J, V irtuoso on Gallileo Gen II, BeagleBone
Black, Raspberry Pi Zero Raspberry Pi 2, and Raspberry Pi 3. (
a
) Insert throughput r esults on Gallileo
Gen II; (
b
) Insert thr oughput results on Raspberry Pi Zer o; (
c
) Insert thr oughput results on BeagleBone
Black; (
d
) Insert throughput r esults on Raspberry Pi 2; (
e
) Insert throughput r esults on Raspberry Pi 3.

Sensors 2020 , 20 , 2788 13 of 32
In general, the update thr oughput of the three engines decr eased when the size of their storage
incr eased. On GII, after inserting 3 million triples, the update throughput of V irtuoso was 250
triples/s (appr ox. 3 observations per second) whereas Jena TDB and RDF4J only could insert 50
triples/s (less than 1 observation per second). Befor e crashing, V irtuoso’s update speed was less
than 100 RDF triples per second, whereas the update speeds of Jena TDB and RDF4J wer e only 20
and 50 triples/second r espectively . On RPi0 and BBB, the inserting speed of V irtuoso was up to
600–900 triples/s in the first 10 million triples. However , V irtuoso’s speed dropped dramatically ,
when storage size r eached 15 million triples. Its speed r emained 350 triples/s, which is only half
of its peak speed. The update behaviour of Jena TDB and RDF4J was similar to that of V irtuoso.
However , with the same storage size, the speed of Jena TDB and RDF4J was less than half of the speed
of V irtuoso. On RPi2 (see Figur e 4 d) and RPi3 (see Figure 4 e), the insertion thr oughput of these RDF
engines was much higher and dropp ed slower than that on RPi0 and BBB. At the beginning of the
test, V irtuoso inserted data with a speed of up to 1300–1400 triples/s. The insertion speed of V irtuoso
decr eased to 700–900 triples/s later when the storage size was up to 40 million RDF triples. Again,
insertion speed of Jena TDB and RDF4J on RPi2 and RPi was 2–3 times slower than that of V irtuoso.
Figur e 5 reports the r esults of the
Exp2
in which we compar ed the query response time of the RDF
engines. On each type of devices, we used the datasets that all the engines could handle. For instance,
we used datasets of 5 millions, 20 millions and 50 millions of RDF triples r espectively to conduct the
second test on GII (see Figur e 5 a), BBB (see Figure 5 b) and RPi3 (see Figur e 5 c). In general, all the
RDF engines could answer the tested SP ARQL queries. Among the thr ee RDF engines, V irtuoso was
always the fastest to r eturn the answer for every query . In most cases, Jena TDB and RDF4J wer e able
to answer these queries in less than 10 seconds. However , to answer the mor e complicated queries,
e.g., snow flake shape query F3, took r oughly a minute.
The dif ference in scalability and performance of the thr ee engines can be explained by their
memory usage which is reported in Figur e 6 a,b. Note that, a part of the memory is occupied by the
operating system. Therefor e, the maximum available memory for the applications is always lower than
the size of RAM. For instance, ther e is only 230 MB available memory on the GII, nearly 380 MB on P0
and BBB and 950 MB in RPi2 and RPi3. The memory consumption of Jena TDB and RDF4J gradually
incr eased according to the size of the storage. In the throughput test (see Figur e 6 a), the memory
consumption of Jena TDB and RDF4J r ose up to 230 MB, 380 MB and 650 MB after inserting 5 million,
20 million, 50 million RDF triples, respectively . The memory usage histogram of Jena TDB and
RDF4J explains why they ran out of memory when operating on GII, RPi0 and BBB. In contrast, the
memory buf fer of V irtuoso was statically set depending on the maximum RAM available on each
device. For instance, it was set to 200 MB on GII, 350 MB on BBB and RPi0 and 850 MB on RPi2
and RPi3. On the same device, V irtuoso had better scalability than Jena TDB and RDF4J because it
handled the buf fer memory better . For example, writing data fr om memory to the secondary storage
to claim back memory space could help V irtuoso enlarging its storage. V irtuoso was able to store up
to 8.5 million RDF triples on GII, and near 40–42 million RDF triples on RPi0 and BBB. W riting data
into the secondary memory to cr eate more r oom for caching new data is a widely used technique in
conventional database management systems [
68
]. By using this technique, it can be explained why the
insertion speed of V irtuoso dropped dramatically and was heavily penalised on the devices with less
memory . However , compared to Jena TDB and RDF4J, V irtuoso used bigger buf fer memory to cache
mor e data in main memory , which explains why in our experiments V irtuoso could update data and
answer the queries faster .

Sensors 2020 , 20 , 2788 14 of 32
L1 L2 L3 L4 S1 S2 S3 F1 F2 F3 F4
1
10
second (in log scale)
JenaTDB RDFJ4 V irtuoso
( a )
L1 L2 L3 L4 S1 S2 S3 F1 F2 F3 F4
1
10
second (in log scale)
JenaTDB RDFJ4 V irtuoso
( b )
L1 L2 L3 L4 S1 S2 S3 F1 F2 F3 F4
1
10
second (in log scale)
JenaTDB RDFJ4 V irtuoso
( c )
Figure 5.
Querying test re sults of Jena TDB, RDF4J, V irtuoso and RDF4Led. (
a
) Query response time
against 5 million triple dataset on Gallileo Gen II; (
b
) Query response time against 20 million triple
dataset on BeagleBone Black; (
c
) Query response time against 50 million triple dataset on Raspberry Pi3.

Sensors 2020 , 20 , 2788 15 of 32
0 5 8.5 10 15 20 25 30 35 40 42 45 50
0
200
235
350
385
500
750
850
950
V irtuoso on GII
V irtuoso on RPi0 and BBB
V irtuoso on RPi2 and RPi3
Memory boundary of the GII
Memory boundary of the RPi and BBB
Memory boundary of the RPi2 and RPi3

Storage size (in million triples)
Memory consumption(MB)
JenaTDB RDF4J V irtuoso
( a )
0 5 8.5 10 15 20 25 30 35 40 42 45 50
0
200
235
350
385
500
750
850
950
V irtuoso on GII
V irtuoso on RPi0 and BBB
V irtuoso on RPi2 and RPi3
Memory boundary of the GII
Memory boundary of the RPi and BBB
Memory boundary of the RPi2 and RPi3

Storage size (in million triples)
Memory consumption(MB)
JenaTDB RDF4J V irtuoso
( b )
Figure 6.
Memory consumption of RDF4J, Jena TDB, V irtuoso. (
a
) Memory consumption of RDF
engines in update throughput test; ( b ) Memory consumption of RDF engines in query evaluation.
4. RISC-Style Approach for Lightweight Edge Devices
4.1. Rationale of Our System Design
Fr om our empirical study , we clearly see that lightweight edge devices are dif ferent fr om standar d
computing har dware in r espect to two characteristics that determine the performance of an RDF
stor e: (i) They have a significantly smaller amount of main memory and (ii) they ar e equipped with
flash-based storage as secondary memory and storage. Besides that, data processing on the network
edges operates in a dynamical environment with fr equent data updates and changes in devices
and sensors.
T ypically , RDF engines ar e optimised for machines with massive amounts of RAM and multiple
high-performance disk arrays. This abundance of r esource enables them to stor e billion-triple datasets
and answer complex SP ARQL queries. However , our empirical study has shown that these RDF
engines suf fer from significant performance pr oblems when they run on the edge devices. T o manage
lar ge static RDF datasets, these RDF engines use sophisticated indexing mechanisms that consume huge
amounts of main memory and incur high update costs. Using too much memory on memory-constraint
devices may cause system paging behaviours or out-of-memory err ors that heavily penalise the
performance or harm the r obustness. Such inef ficiency is due to the lack of main memory , and a less
ef ficient disk-based data indexing structure and caching mechanism on flash-based storage.
In comparison to har d disks, flash-based storage devices have faster random accesses but fail to
pr ovide fast random writes [
69
]. Flash memory stor es information in arrays of semiconductor memory
cells which ar e organised into pages and pages ar e grouped into blocks. A page is the smallest unit
that can be r ead or written with flash memory . On flash memory , updating a single page in a block

Sensors 2020 , 20 , 2788 16 of 32
is not possible. Instead, first the the whole block must be erased and then the updated data can be
written to this block. Erase is an operation particular to flash-based memory . Thus, write-in-place
operations, that update a single piece of data in a block, consists of two operations on the entire block:
erase and write. Common indexing techniques which are designed for magnetic disks do not manage
well this erase-befor e-write limitation. As a result, they suffer fr om slow write performance when
managing data on flash memory [
25
]. For instance, the commonly used B
+
T ree indexing structur e
in RDF triple stor es is does not work well on flash-based storage [
70
]. However , the performance
of random write can be impr oved by aligning writes to blocks [
25
] and applying appr opriate buffer
management techniques [ 71 ].
T e RISC-style design philosophy described in [
27
] implements the featur es necessary for an
RDF engine ar ound data access and join operations. On top of that, processing loads and r esour ce
consumption ar e mainly caused by these operations. Thus, we will focus our design ef forts on efficient
components for these operations and use simple implementations for the rest with the purpose of
r educing software size.
4.2. Architectural V iew
In general terms, the architectur e of an RDF engine can be views a shown in Figure 7 . At the
bottom layer , an RDF engine has a
P h ys i c a l R D F S t o r a ge
functioning as the secondary memory to
stor e persistent data. The Physical RDF Storage is often coupled with a
B u f f e r M a n a g e r
to manage
in-memory data. The Buf fer Manager caches the data in-use to reduce disk accesses when writing
to the Physical Storage or being read by the
Q u e r y E x e c ut er
. T ypically , an RDF engine will use a
D i c ti o n a r y
to translate the string-based RDF r esources identifiers into encoded identifiers in the form
of integers or longs. The Dictionary is often coupled with an
I n p u t
handler , a
Q u e r y P ar se r
to encode
the RDF r esources in RDF documents or SP ARQL queries, and with an
Out put
handler to r eturn the
original form of RDF r esources. This technique reduces the storage space r equired for RDF triples and
makes comparisons (for joins) mor e efficient.
Ph ysical RDF Storage
Buffer Manager
Query Executor
Dictionary
Input Output

Figure 7. Architectur e Overview .
For our RDF engine, RDF4Led, we reuse the same ar chitecture of traditional RDF engines.
W e reuse the Dictionary techniques to transform RDF r esources into encoded integers. The string
r epresentations of the RDF r esources ar e kept separately on the flash memory . The key components
that dif ferentiate our appr oach from traditional RDF engines ar e the Physical RDF Storage, the Buf fer
Manager and the Query Executor . They ar e specifically optimised for lightweight edge devices.

Sensors 2020 , 20 , 2788 17 of 32
In an RDF engine, the algorithms and techniques, that comprise the Physical Storage, the Buf fer
Manager and the Query Executor , have to be optimised to the nature of the data (in this case RDF)
and the particular har dware of the machine it runs on [
35
,
68
]. T o r educe storage space, we used a very
compact format to stor e a list of RDF triples known as an “RDF molecule.” T o adapt to the specific
flash I/O behaviours, the molecules are or ganised into block units whose size is equal to the flash-erase
block size. On top of that, we used an in-memory caching mechanism to cache the atomic data and
to cluster the write operations in or der to improve the write performance. T o reduce the memory
r equired to maintain the indexes of data in the flash storage, we used an alternative index structur e
that is based on the Block Range Index(BRIN) appr oach [
72
]. The basic idea of BRIN is to summarise
the information of a data block on persistent storage (e.g., its location) into a small tuple. The r esult is
that we can minimise the amount of memory r equired to maintain the indexes.
The r esults of our empirical study indicate that managing memory usage of an RDF engine is
the key factor to achieve r obustness and scalability . The Buffer Manager is used to buf fer updated
data or to cache data read fr om Physical Storage. Its primary role is to keep the engine fr om crashing
by unexpected out-of-memory exceptions. When needed, it flushes data to the Physical RDF Storage
to r eclaim free memory . W rite operations are prioritised by a buf fer replacement policy designed to
r educe the number of overwrites on the same data block as well as the number of r ead operations from
the Physical Storage.
T o answer a SP ARQL query , it is requir ed to perform graph matching operations. These operations
ar e the joins of the RDF triples that match triple query patterns. Among the operations to answer
a SP ARQL query , the graph matching operation is the most resour ce-intensive one. T o reduce
computational cost, our approach is to avoid caching the intermediate r esults of joins. The Query
Executor uses a nested execution model [
73
] to join and processes the join in one-tuple-at-a-time
fashion[
74
]. In each run, the Query Executor adaptively chooses the next triple pattern to probe and
scan. The Buffer Manager is also tightly coupled with the Query Executor to pr ovide cached data in
the buf fer for the efficient use of memory .
5. Storage and Indexing
5.1. Storage Layout
Our RDF storage and indexing model combines the permuted index and molecule-based storage
model. W e use 3 permuted indexes: SPO (subject-pr edicate-object), POS, and OSP , which is sufficient
to cover all possible query patterns. For example, the SPO layout can be used for triple query patterns
with a bound subject (s ? ?) and bound subject-predicate (s p ?). Although, using all six possible
permutations combinations may answer complex queries mor e effectively , using only three consumes
less storage space and decr eases the cost of updates, i.e., we must update only three data structur es
instead of six, which is crucial for flash storage.
Our design consists of a Physical Layer and a Buffer Layer . The Physical Layer stores data dir ectly on
flash storage (Physical RDF Storage) and the Buf fer Layer operates in main memory (Buffer Manager)
and has the following r oles: (i) grouping and caching atomic data updates befor e writing a block;
(ii) indexing the data stor ed on the Physical Layer; and (iii) caching recently used data for r ead
performance. This allows us to group multiple updates within a block into one erase-and-write
operation and to impr ove read performance thr ough the cache.
Physical Layer:
T o achieve high compression of triples on the flash storage, we leverage the
molecule-based storage model. RDF molecules are a hybrid data structur e. It stores a compact list of
pr operties and objects related to a subject which is the r oot of the molecule. Molecule clusters are used
in two ways: to logically group sets of r elated r esources, and to physically co-locate information r elated
to a given subject. Physically we repr esent a molecule as a list of co-located integers corresponding to
S, P , and O as shown in Figur e 8 . By this, we avoid storing repetitive values multiple times. Moreover ,
we enable further data compr ession, e.g., by storing deltas of sorted integers instead of full values.

Sensors 2020 , 20 , 2788 18 of 32
s1 p1 o1 o2 o3 ; p2 o4 o5 ; p3 o6 .
s1
o1
o2
o1
o4 o5
o6
Logical
represen tation
Ph ysical
la y out
p1
p1
p1
p3
p2 p2

Figure 8. Example of an SPO molecule.
In the Physical Layer , we store sorted molecules into continuous pages (r ead units) which are
gr ouped into blocks (erase units). Moreover , all entities in molecules are also sorted to impr ove search
performance. In the example shown in Figure 9 , each block in the Physical Layer contains four pages
and each page stor es molecules.
Ph ysical La y er
Buffer La y er
T riple Entry
Page En try
Block Entry
s1 p1 o1 o2 s2 p1 o4; .. s3 p2 o1; .. s3 p3 o2; s4 p5 o2; .. s5 p5 o6; ..
o3; p2 o4 o4; .. .. .. .. .. .. .. .. .. .. .. .. .. .. .. ..
p3 o6.
012345
s1
p1
o1
0
s2
p1
o4
1
s2
p1
o5
s3
p2
o1
2
s3
p3
o2
3
s4
p5
o2
4
s5
p5
o6
5

Figure 9. T wo-layers storage model consist of a Physical Layer and a Buffer Layer .
Buf fer Layer:
Similarly to the idea of BRIN, the Buf fer Layer summarises the information of the
data in the Physical Layer . In the Buf fer Layer , to keep the refer ence to a data page, we cache the first
triple of the first molecule in the page. The refer ence to a data block is the first page of the data block.
Figur e 9 depicts an example of the indexing structure that we use for storing an SPO index. The Buffer
Layer maps the r eferences of the pages and the blocks to their physical addr esses. Thus, it acts as an
index of the data that locates in the Physical Layer . W e distinguish thr ee types of entries in the Buffer
Layer: triple entry , page entry and block entry . A page entry is an entry that refers to the beginning
of a page in the Physical Layer , it contains the first triple in the first molecule of a page. A block entry
is a page entry with an extra field indicating that this page is the first page a block. A triple entry
contains an atomic triple and a value indicating whether this triple has been modified. In Figure 9 ,
the gr ey columns repr esent block entries and the white columns repr esent page entries. For fast lookup
operations on the Buf fer Layer , all triples are sorted lexicographically . Moreover , we maintain the
logical or der of the triples as in the Physical Layer . This allows us to group and commit sequential
pages containing modified triples and belonging to the same block in one write operation.
5.2. Index Lookup
T o efficiently r etrieve RDF triples that match a triple pattern, we execute a lookup on the index
layout in which triples ar e stored sorted on the bound elements of the triple pattern. For example,
a sear ch for the matched triple of a triple pattern (s, p, ?) is executed on the SPO index layout, or
the triples that match pattern (?, p, o) are answer ed with POS index layout. Thus, we can answer a

Sensors 2020 , 20 , 2788 19 of 32
triple pattern query by using a single range scan on the corr esponding index layout. For instance,
in the sorted SPO index layout, the matched triples of the triple pattern (s, p, ?) ar e of a form (s, p,
o
i
) and ar e located between (s, p, o
mi n
) and (s, p, o
m a x
), wher e o
mi n
and o
m a x
ar e the smallest and the
highest identifiers within the layout. As triples ar e sorted, the matched triples are r etrieved as a sublist.
The sublist is computed by finding the lower and the upper bound positions of the matched triples on
the layout. In this example, the lower bound position of the matched sublist is the position of the triple
(s, p, o
mi n
) and the upper bound position is the position of the triple (s, p, o
m a x
). The matched triples
ar e extracted from the layout by pr obing triple by triple from the lower bound position to the upper
bound position.
5.3. Writing Strategy
The write operations fr om Buffer Layer to Physical Layer ar e optimised is for flash memory by
following the basic principles: (i) minimise the number of physical writes to physical storage; (ii) group
multiple updates into one write operation; (iii) keep a r elatively high hit ratio for the data in the buffer .
W e use the Buffer Layer to delay write operations and to gr oup many updates in blocks in order to
mitigate the issue of single erase-before-write operations. For a high cache hit ratio, we keep the data
blocks with higher chances to be accessed and modified in the future. The details of the buffer eviction
strategy used in RDF4Led ar e presented in Section 6 .
Figur e 10 provide an example to illustrate the pr ocess of inserting 5 triples (03, 06, 01), (03, 06,
04), (18, 10, 12), (26, 24, 04), and (30, 28, 21). Note that, these triples contain only integers as they are
alr eady translated by the Dictionary . W e first add them to the Buffer Layer . The page entries in the
Buf fer Layer indicate the pages where the triples will be physically inserted. For instance, the arriving
triples (03, 06, 01), (03, 06, 04) ar e lexicographically smaller than the triple (08, 07, 09) which is the first
entry of page 2. Thus, they are added to page 1. Similarly , the incoming triples (18, 10, 12), (26, 24, 04)
and (30, 28, 21) will be added to page 10, page 4, and page 5.
T riple Entry
P age Entry
Blo c k Entry
Buffer La y er
01
02
03
03
02
01
03
06
10
03
06
11
08
07
09
09
05
10
09
13
01
15
06
16
18
10
11
18
10
12
20
23
24
26
11
01
26
24
04
29
27
02
30
28
21
30
28
22
31
33
36
Ph ysical La y er
01 02 03 04 03 02 04 ; 08 07 09 . 09 05 10 11 26 11 01 ; 29 27 02 04 30 28 22 ; 31 33 36 ; 09 13 01 . 15 06 16 ; 18 10 11 12 20 23 24 .
05 ; 06 07 05 07 08 ; 09 05 02 06 12 24 02 04 . 30 28 21 29 22 34 37 10 14 01 02 07 16 ; 10 17 21 23 24 .
. 02 03 04 06 10 11 16 22 23 24 .
0123456789 1 0 1 1

Figure 10. Example of clustering of writes.
When the size of the Buf fer Layer reaches its limit or when data needs to be moved out to
fr ee memory , the triples ar e written to the Physical Layer . All dirty pages, i.e., pages containing
modified triples, within the same block are written at the same time to save expensive erase operations.
For example, when the system needs to write 2 triples from buf fer to storage, we move either data
belonging to block 0, i.e., triples (03, 06, 01), (03, 06, 04), or data belonging to block 1, i.e., triples (26,
24, 04), (30, 28, 21), so that only one block is erased. In case we choose triples (18, 10, 12) and (30, 28,
21), the system has to erase two blocks befor e writing data. Moving data fr om the Buffer Layer to the
Physical Layer is an essential optimisation pr oblem of maximising the number of triples we can write
within a minimal number of blocks in order to minimise the number of erase operations. Obviously ,
block 0 is written befor e block 1 as its density is greater than that of block 1. The higher the density a
block has, the less chance the next arriving triple will have to be inserted into that block.

Sensors 2020 , 20 , 2788 20 of 32
6. Buffer Manager
Similar to a conventional database system, the Buffer Manager is r esponsible for handling all
r equests for data blocks. If the request ed data block already exists in main memory , it passes the
block’s r eference to the r equester . If not, it fetches the data block fr om the flash drive (Physical Layer)
and loads it into main memory (Buf fer Layer). It also decides which data block will be kept in main
memory . T o perform efficiently , the Buffer Manager r equires a suitable r eplacement strategy to create
space for a new data block and write back to Physical Storage data blocks which ar e no longer needed.
Our Buf fer Manager uses AD-LRU [
71
], a flash-friendly data buf fering technique. W e organise
the data blocks in two queues, the hot queue and cold queue (see Figure 11 ). In the hot queue, we keep
the blocks that have been r ecently accessed. When r eleasing memory , we will not write them to the
Physical Layer immediately , but to the cold queue. W e organise data in a flat fashion in the hot queue.
W e keep sorted triples instead of molecules to speed up atomic updates as well as index look-up
operations. T o save memory , the cold queue contains the molecule blocks (blocks in compressed form)
that ar e ready to be written to the Physical Layer .
DIRTY
LOW DENSITY
RECENT
DIRTY
HIGH DENSITY
RECENT
DIRTY
HIGH DENSITY
LESS RECENT
CLEAN
LOW DENSITY
RECENT
CLEAN
HiGH DENSITY
RECENT
DIRTY
LOW DENSITY
RECENT
COMPRESSED
CLEAN
HIGH DENSITY
RECENT
COMPRESSED
CLEAN
LOW DENSITY
LESS RECENT
COMPRESSED
HOT QUEUE COLD QUEUE
BUFFER
2 1 3 4 5 6 8 7

Figure 11. Example of how data block is organised in the buf fer queues.
Algorithm 1 illustrates the pr ocess of accessing a data block from the Buf fer Manager .
For r equesting a given data block, the requester sends its block entry (of the Buf fer Layer) to the Buffer
Manager . First, the Buffer Manager looks up for the r eference to the r equested data block in main
memory (line 2). If the requested data block does not exits in main memory , the Buffer Manager checks
if the ther e is sufficient memory available for holding a new data block (lines 4–6). During the process
of checking memory availability , exiting data blocks in the memory may be written to the Physical
Layer to r eclaim space for new blocks (see Algorithm 2 ). After having been r ead, the new data block is
“decompr essed” into its flat form, i.e., decomposed into individual triples, and added to the hot queue,
while its r eference is r eturned (lines 8–12). If the data block already existed in main memory , the Buffer
Manager will check if it is in the the hot queue or in the cold queue. Note that, the organisation of the
hot queue and the cold queue is similar , the only differ ence is that hot queue holds uncompre ssed data
while cold queue holds compr essed data. If the data block is in cold queue, the system again prepar es
space for decompr essing the data block (lines 15–18). Before r eturning the refer ence of the data block,
its position in the hot queue is adjusted to mark the data block as being recently accessed (lines 20–21).

Sensors 2020 , 20 , 2788 21 of 32
Algorithm 1: Access to a data block fr om buffer
input : blockEntry : Buffer Layer block entry
output : Block : refer ence to requested data block
1 Function fetchFr omBuffer(blockEntry)
2 B l o c k ← l o o k U p I n B u f f e r ( b l o c k E n t r y ) ;
3 /* If the r equested block is not in buffer then r ead it from Physical Layer */
4 if isNull(Block) then
5 /*Check available memory for r eading the data block*/
6 memoryC heck ( ) ;
7 /*Read data fr om Physical Layer*/
8 a d d r t o R e ad ← co m pute Address ( bl o c k E n t r y . g et B l o c k I d ()) ;
9 B l o c k ← r e a d B l o ck ( a d d r t o R e a d ) ;
10 B l o c k ← d e co m p r e s s ( Bl o c k ) ;
11 add Or Ad just H otQueue ( B l o ck ) ;
12 return Block;
13 else
14 /* If the block fr om Cold queue */
15 if isInColdQueue(Block) then
16 /* pr epare space for decompr essing compressed block */
17 memoryC heck ( ) ;
18 B l o c k ← d e co m p r e s s ( Bl o c k ) ;
19 /* Adjust r ecent order of block in the H o t Q u eu e */
20 addOrAdjustHotQueue(Block);
21 return Block;
Algorithm 2 illustrates the memory checking pr ocedure which is called in the first algorithm
(line 6 and line 17). This algorithm guarantees that the system does not run out of memory during
runtime. As we divide the buffer into the hot queue and the cold queue, the hot/cold ratio defines how
many blocks ar e held in each queue. Depending on the curr ent hot/cold ratio, the Buffer Manager
decides to move a data block fr om the hot queue to the cold queue, or to evict a data block from the
cold queue and write it to the Physical Layer . For instance, when the available memory is not suf ficient
for holding a “flattened” data block (line 2), the system computes the curr ent hot/cold ratio (line 4)
and if the curr ent ratio is higher than the predefined ratio, data is evicted from the hot queue and
moved to the cold queue. The system compresses the evicted data block fr om the hot queue and puts
it into the cold queue (lines 6–10). Otherwise, if the curr ent ratio is not higher than the predefined
ratio, data is evicted from the cold queue. If the evicted data block is modified, the system writes it
back to the Physical Layer .

Sensors 2020 , 20 , 2788 22 of 32
Algorithm 2: Check available memory and Evict data fr om buffer if need
1 Function memoryCheck()
2 while mem a v ai l < b l o ck Si ze do
3 /*compute curr ent hot/cold ratio */
4 r a t i o ← queue H ot . s i ze
queue Co l d . s i z e ;
5 /* If curr ent hot/cold ration is higher than the given ratio */
6 if r a t i o > r at i o const then
7 /* Move data fr om hot queue to cold queue */
8 B l o c k f l atten ← queue h o t . p o p ( ) ;
9 B l o c k co m pr e s s e d ← c o m p r e s s ( B l o c k f l atten ) ;
10 a d dO r A d j u s tC o l d Q u e ue ( Bl o c k c o m pr e s s e d ) ;
11 else
12 B l o c k to W r it e ← queue c o l d . p o p ( ) ;
13 /*If the block is modified then write it to physical layer*/
14 if i s D ir t y ( B l o c k t o W r it e ) then
15 b l o c k id ← B l o ck t oW ri te . g et I d () ;
16 a d d r t o W ri t e ← com pute Addr ess ( b l o c k i d ) ;
17 wr i t e B l o ck ( Bl o ck to W ri te , a dd r t o W ri te ) ;
Dividing the buf fer into a hot queue and a cold queue and to move data blocks between them is
our first strategy to delay write operations when the system needs more memory . However , in the
worst case, the Buffer Manager still has to write the data to Physical Storage. T o make the Buffer
Manager mor e efficient, we keep data blocks in each queue in the order illustrated in Figur e 11 .
This or dering follows the following priorities:
1. the clean/unmodified blocks;
2.
the higher density blocks, defined by the ratio between the number of triples in a block and the
capacity of the block i.e., density B l o c k A = # tr i p l e s B l oc k A
c a p a c i ty B l oc k A ;
3. the least r ecently used blocks.
This prioritisation allows us to keep dirty/modified blocks in the buf fer as long as possible
to delay write operations and gr oup more updates into dirty/modified blocks. In case we need to
r elease memory , we always refer to the cold queue and start fr om the beginning of the priority list.
Consequently , we prioritise clean/unmodified blocks to be evicted. Since we do not have to perform
any write operation for them, we can just release the memory they occupy . Then, we prioritise blocks
that contain many triples, i.e., high-density blocks, as they group multiple updates into one erase-write
operation. Finally , the traditional LRU strategy is used to avoid writing the same block multiple times
in a r ow .
7. Adaptive Strategy for Iterative Join Execution
The most r esource-intensive task of answering a SP ARQL query is to perform the graph pattern
matching over the RDF dataset. The graph matching operator executes a series of join operations
between RDF triples that match the triple patterns. Join operations have the greatest impact on the
overall performance of a SP ARQL query engine, typically requiring a lar ge number of comparison
operations that can only be done ef ficiently if recor ds are stor ed in memory .
The join performance can be tuned by optimisation algorithms which plan optimal join orders
and join algorithms [
27
,
75
,
76
]. These approaches assume that memory is always available during
the course of the execution of a chosen query plan. However , in light-weight computing devices
memory is critically low and, as such, the memory resour ces available to an RDF engine ar e unreliable,

Sensors 2020 , 20 , 2788 23 of 32
e.g., a sur ge of the number network connections to the device might drain available memory for all
other running pr ocesses. Lack of memory may block join operations that requir e temporary virtual
memory such as hash-joins or sorted-mer ge joins, and thus hurts the overall performance of the query
engine or pr obably crashes the engine.
Materialisation techniques that write intermediate join r esults to storage are an attractive solution
for the issue of memory shortage [
68
]. However , on flash storage, writing is much slower if a random
write operation happens. Furthermore, only a limited number of erase operations can be applied to a
block of flash memory befor e it becomes unreliable and fails.
T o minimise the memory requir ed for executing a SP ARQL query and making the best use of the
indexing scheme intr oduced in Section 5 , we adopt the one-tuple-at-a-time approach to compute the
join. This approach can r educe the memory consumption as no virtual temporary memory is requir ed
to buf fer the intermediate join results. The basic idea of the algorithm to compute the join of a graph
pattern is as follows: A mapping solution (mapping for short) is continuously sent to visit each triple
pattern of the graph pattern. In each visit, it searches for triples matching the triple pattern. For each
matched triple, variables in the triple pattern and the corr esponding value in the triple are added to
the mapping. The mapping with new values will be sent to visit the next triple pattern, or be returned
as query r esult when all triple patterns have been visited. The pseudo code of the join propagation
algorithm is given in Algorithm 3 .
Algorithm 3: Join pr opagation
1 Function propagate( µ , P )
input : µ : mapping, P : set of triple query patterns
output : µ : mapping
2 if isEmpty( P ) then
3 return µ ;
4 p ← findNextPattern( µ , P ) ;
5 p k e y ← c r e at e K ey ( µ , p ) ;
6 T ← indexScan( p k e y );
7 P 0 ← P \ { p } ;
8 for t ∈ T do
9 µ ← bindMapping( t, p ) ;
10 propagate( µ , P 0 ) ;
11 µ ← resetMapping( t, p ) ;
The pr opagate(
µ
,
P
) function is used to recursively pr opagate the input mapping. The function
starts with an empty mapping
µ
and a set of unvisited triple patterns
P
. For each run, it checks and
r eturns the input mapping as a result, if ther e is no triple pattern left to visit (line 1–2). Based on the
given input mapping, it looks for the optimal unvisited triple query pattern to visit (line 3). T o sear ch
for triples matching pattern
p
, an index search key
p k e y
is cr eated by replacing the variables in
p
accor ding to
µ
(line 4). For each matched triple
t
, the corr esponding variables and values are bound
into the mapping. Then another propagation of the mapping to the r emaining unvisited triple patterns
is initiated (line 7–10).
In each run of the pr opagation algorithm, the function findNextPattern(
µ
,
P
) is called to find the
optimal triple pattern to execute the propagation (see Algorithm 4 ). For each triple pattern
p
in
P
,
the set of triple query patterns, the function sear ches for a triple pattern that shares variables with the
input mapping
µ
(line 4). W ith each shar ed pattern found, an index search key pattern,
p k e y
, is cr eated
(line 5). An index lookup on
p k e y
is executed to sear ch for the upper bound and lower bound positions
of the set of the matching triples in the index, as described in the pr evious section (line 6). The size of

Sensors 2020 , 20 , 2788 24 of 32
the index lookup
I
is defined as the range between the upper bound and lower bound positions (lined
7–9). The function returns the triple pattern that has the minimal size of the index lookup (line 11).
Algorithm 4: Find next pattern
1 Function findNextPattern( µ , P )
input : µ : mapping, P : set of triple query patterns
output : P : triple query pattern
2 p n e x t ← nu l l ;
3 s mi n ← I n t e g er m a x ;
4 for p ∈ P do
5 if isShar ed( µ , p) then
6 p k e y ← c r e at e K ey ( µ , p ) ;
7 I ← i n de x L o o k U p ( p k e y ) ;
8 s ← s i z eO f ( I ) ;
9 if s < s mi n then
10 s mi n ← s ;
11 p n e x t ← p ;
12 return p n e x t ;
The join pr opagation algorithm is similar to the nested iterations. Nested loop join is often
ar gued to have a poor performance as it does not attempt to prune the number of comparisons.
However , supported by an efficient index scheme, an index nested loops join can perform as well
as other join algorithms [
73
]. W ith the design of our storage, the index lookup can be done mostly
within the buf fer layer , only two extra I/O operations may be requir ed. The visitor pattern, that sends
a mapping to visit each triple pattern and to execute index lookup, r educes the extra memory for the
joins as only a mapping is kept in the main memory . This mechanism also enables the adaptivity of the
joins. The function findNextPattern(
µ
,
P
) decides which triple pattern the mapping should visit first.
Similarly to a r outing policy of stream pr ocessing engines, e.g., Eddies [
74
] or CQELS [
77
], this function
defines the pr opagating policy to achieve a certain optimisation purpose. In our case, we attempt to
minimise the number of pr opagations by choosing the shortest index scan in each run. Note that, this is
also the key place for adding sophisticated optimisation algorithms, e.g., adaptive caching algorithm
to be discussed in our futur e work.
8. Evaluation Results
Operating systems for a specific type of devices are usually customised and optimised to meet a
specific har dware configuration. For example, by default, Raspbian is installed on the Raspberry Pi
Zer o while a Galileo Gen II is running the Y octo 1.4 Poky Linux distribution. A Java virtual machine is
available on most edge devices and Java is platform independent. Hence, we choose to implement
our appr oach in Java to take advantage of its “compile once run anywhere” pr operty that enables the
portability of our RDF4Led engine.
RDF4Led is developed by reusing Jena TDB code base and following the RISC-style design as
pr esented in Section 4.1 . W e only selected the requir ed components and re-implemented those with
our algorithms (see Sections 5 – 7 ). As a r esult, the size of RDF4Led is only 4 MB, while the sizes of Jena
TDB is 13 MB; the size of RDF4J is 58 MB; and the size of V irtuoso is 180 MB.
Figur e 12 reports the r esult of
Exp1
in which we measur e and compare the update thr oughput of
RDF4Led against Jena TDB, RDF4J, and V irtuoso. The description of
Exp1
can be found in Section 3.4 .
Due to the similar r esult, we omit the experiment results for Raspberry Pi 2 (RPi3), and Beagle Bone

Sensors 2020 , 20 , 2788 25 of 32
Black (BBB), and r eport the experiment results on Intel Galileo Gen II (GII), Raspberry Pi Zero W
(RPi0), and Raspberry Pi 3 (RPi3).
0 5 10 15 20 25 30
0
250
500
750
Storage Size (in million triples)
Throughput (triples/sec)
JenaTDB
RDF4J
V irtuoso
RDF4Led
( a )
0 10 20 30 40 50
0
500
1,000
1,500
2,000
2,500
Storage Size (in million triples)
Throughput (triples/sec)
JenaTDB
RDF4J
V irtuoso
RDF4Led
( b )
0 10 20 30 40 50
0
500
1,000
1,500
2,000
2,500
3,000
Storage Size (in million triples)
Throughput (triples/sec)
JenaTDB
RDF4J
V irtuoso
RDF4Led
( c )
Figure 12.
Inserting throughput of RDF4Led compar ed to Jena TDB, RDF4J and V irtuoso on Gallileo
Gen II, Raspberry Pi Zer o and Raspberry Pi 3. (
a
) Insert thr oughput results on Gallileo Gen II; (
b
) Insert
throughput r esults on Raspberry Pi Zero; ( c ) Insert thr oughput results on Raspberry Pi 3.
The r esults show that in comparison to Jena TDB and V irtuoso, RDF4Led can stor e a larger dataset
and has a much higher update thr oughput. On GII, RDF4Led scaled up to 22 million triples, which is
thr ee times larger than V irtuoso and four times larger than Jena TDB. W e stopped the experiment of
RDF4Led on GII when its speed dr opped below 80 triples/second after inserting 22 million triples.
The scalability on Pi0 (see Figure 12 b) and BBB was similar . On both these devices, RDF4Led was
able to add the full 50 million triples. The update thr oughput of RDF4Led also decreased when
the number of triples in the stor e increased. Among the three engines, RDF4Led has the highest
inserting thr oughput on GII and RPi0. On GII, with 5 million triples inserted, the update throughput of
RDF4Led was still ar ound 350 triples/s, whereas V irtuoso was only able to insert data with a speed of
125 triples/s. On Pi0, RDF4Led performed update operations two to three times faster than V irtuoso.
Even when the size gr ew to nearly 50 million triples, RDF4Led’s speed still stayed at 300–350 triples/s
which was two times faster than the speed of V irtuoso with only 15 million triples. On RPi3, RDF4Led
updated faster than V irtuoso in the beginning. When its storage size r eached 20 million RDF triples,
the speed of RDF4Led became lower than that of V irtuoso. However , RDF4Led still ran faster than
RDF4J and Jena TDB.

Sensors 2020 , 20 , 2788 26 of 32
The
Exp1
r esults show how the lack of memory negatively influences the scale of standard RDF
engines like Jena TDB, RDF4J, and V irtuoso. RDF4Led can insert mor e data as it has a smaller memory
footprint and r equires less memory to maintain the indexes. Furthermor e, compared to the other
engines, RDF4Led inserts data faster as our flash-awar e index structure and writing strategy ar e better
compatible with the flash memory’s I/O behaviours. Other RDF engines employ B
+
tr ee to index RDF
data in their storage. Their low thr oughput confirmed the negative influence of flash I/O behaviours
on the write performance of such disk-based indexing techniques. Because RDF4Led was designed
to save memory , on the devices with more RAM like RPi2 and RPi3, V irtuoso can run faster than
RDF4Led. V irtuoso’s algorithms need bigger memory buf fers to achieve their best performance.
The r esults of
Exp2
ar e shown in Figure 13 . In this experiment, we compared the query r esponse
time of RDF4Led with that of thr ee engines on GII, RPi0 and RPi3 with a dataset size that all engines
could handle. The results show that RDF4Led answer ed all the queries considerably faster than Jena
TDB and RDF4J on all devices. RDF4Led, RDF4J and JenaTDB follow the nested execution model to
compute multiple joins between RDF triples that match triple patterns. However , Jena TDB and RDF4J
wer e implemented with an iterator pattern, while RDF4Led followed the visitor pattern. In general,
both algorithms execute lookup operations and index scan operations to extract the compatible triples
fr om the dataset. The performance of these algorithms is mainly influenced by the performance of the
lookup and index scan operations on the indexes. The better performance of RDF4Led indicates that
our lightweight index structur e helps RDF4Led outperform the B + tr ee implemented in Jena TDB.
On the same dataset and on the same device, RDF4Led only answers the queries generated from
templates F2 and S1 faster than V irtuoso does. These queries include star-shaped pattern of mor e
than 6 triple patterns. In other cases, RDF4Led is slower than V irtuoso as it does not aggr essively
pr e-allocate a fix amount of memory for sophisticated optimisation algorithms (V irtuoso allocates two
to thr ee times more than RDF4Led). W e see this as an option to improve query performance in our
futur e work. However , at the current stage, RDF4Led can deliver good performance for datasets of
up to 50 million triples on these devices, e.g., 5 s at maximum and 1 s on average query execution
times. The performance and scalability of RDF4Led can enable these kinds of low-capability devices
to handle appr oximately 600 thousand sensor observations or 6 month worth of data of 25 weather
stations in a single active RDF graph.
For
Exp3
the memory consumption of RDF4Led and the other engines is r eported in Figure 14 .
In the insertion experiment, RDF4Led consumed only 85 MB of memory even when the storage went
up to 50 million triples. In the query evaluation experiment, RDF4Led used less memory than the
other engines did in the insertion test. Even with a dataset of 50 million triples, RDF4Led used only
80 MB. This was only a half of the memory that Jena TDB used in the query test with 10 million triples
and was only 10% of the memory that the V irtuoso occupied constantly .

Sensors 2020 , 20 , 2788 27 of 32
L1 L2 L3 L4 S1 S2 S3 F1 F2 F3 F4
1
10
second (in log scale)
JenaTDB RDFJ4 RDF4Led V irtuoso
( a )
L1 L2 L3 L4 S1 S2 S3 F1 F2 F3 F4
1
10
second (in log scale)
JenaTDB RDFJ4 RDF4Led V irtuoso
( b )
L1 L2 L3 L4 S1 S2 S3 F1 F2 F3 F4
1
10
second (in log scale)
JenaTDB RDFJ4 RDF4Led V irtuoso
( c )
Figure 13.
Query test results of Jena TDB, RDF4J, V irtuoso, and RDF4Led. (
a
) Query response time
against 5 million triple dataset on Gallileo Gen II; (
b
) Query response time against 20 million triple
dataset on Raspberry Pi Zer o; (
c
) Query r esponse time against 50 million triple dataset on Raspberry Pi 3.

Sensors 2020 , 20 , 2788 28 of 32
0 5 8.5 10 15 20 25 30 35 40 42 45 50
0
115
200
235
350
385
500
750
850
950
V irtuoso on GII
V irtuoso on RPi0 and BBB
V irtuoso on RPi2 and RPi3
Memory boundary of the GII
Memory boundary of the RPi and BBB
Memory boundary of the RPi2 and RPi3

Storage size (in million triples)
Memory consumption(MB)
JenaTDB RDF4J RDF4LED V irtuoso
( a )
0 5 8.5 10 15 20 25 30 35 40 42 45 50
0
200
235
350
385
500
750
850
950
V irtuoso on GII
V irtuoso on RPi0 and BBB
V irtuoso on RPi2 and RPi3
Memory boundary of the GII
Memory boundary of the RPi and BBB
Memory boundary of the RPi2 and RPi3

Storage size (in million triples)
Memory consumption(MB)
JenaTDB RDF4J RDF4J V irtuoso
( b )
Figure 14.
Memory consumption of Jena TDB, RDF4J, V irtuoso, RDF4Led. (
a
) Memory consumption
report of update thr oughput test; ( b ) Memory consumption report of query evaluation test.
9. Conclusions
This paper pr esented an empirical study of the scalability of RDF engines running on
r esource-constrained devices, which ar e repr esentative of typical IoT edge nodes. The r esults of
the study show that these engines do not scale on such devices due to the lack of main memory
and the special I/O r equirements of flash storage. T o address these pr oblems, we proposed
RDF4Led, a RISC-style approach to building an RDF engine tailor ed to resour ce-constrained edge
devices. Our appr oach includes a flash-memory-aware storage str ucture, a flash-memory-awar e buffer
management strategy for RDF data and a low-memory-footprint join strategy for impr oved scalability
as well as r obustness. The RDF4Led engine is significantly smaller in terms of memory footprint than
generic RDF engines like Jena TDB, RDF4J or V irtuoso. W e tested RDF4Led on five differ ent types
of ARM boar ds. These experiments showed that RDF4Led can handle 2–5 times more data than its
competition. Moreover , RDF4Led requir es only 10%–30% of the memory consumed by Jena TDB,
RDF4J and V irtuoso when operating on the same size of dataset. It can handle up to 50 million triples
with appr oximately 115 MB of memory and can outperform its competitors in updating throughput;
it is faster in answering queries than its Java counterpart, Jena TDB. While V irtuoso can deliver faster
query pr ocessing time, it does so by pre-allocating a fixed amount of memory , which is 3 times more
than that r equired by RDF4Led and with a significantly mor e complex implementation.

Sensors 2020 , 20 , 2788 29 of 32
Author Contributions:
writing-original draft, A.L.-T .; writing-review and editing, C.H., M.H. and D.L.-P .
All authors have read and agr eed to the published version of the manuscript.
Funding:
This work was funded in part by the Irish Resear ch Council under Grant Number GOIPG/2014/917,
Science Foundation Irel and (SFI) under Grant No.SFI/12/RC/2289, co-funded by the Eur opean Regional
Development Fund, the German Ministry for Education and Research as BIFOLD - Berlin Institute for the
Foundations of Learning and Data (ref. 01IS18025A and ref 01IS18037A), and the Marie Skodowska-Curie
Programme H2020-MSCA-IF-2014 (SMAR TER project) under Grant No. 661180.
Conflicts of Interest: The authors declare no conflict of inter est.
References
1. Ashton, K. That ‘internet of things’ thing. RFID J. 2009 , 22 , 97–114.
2.
Mattern, F .; Floerkemeier , C. Fr om the Internet of Computers to the Internet of Things. In From Active Data
Management to Event-Based Systems and More ; Springer: Cham, Switzerland, 2010; pp. 242–259.
3.
Nitti, M.; Pilloni, V .; Colistra, G.; Atzori, L. The virtual object as a major element of the internet of things: a
survey . IEEE Commun. Surv . T utor . 2015 , 18 , 1228–1240. [ CrossRef ]
4.
Akpakwu, G.A.; Silva, B.J.; Hancke, G.P .; Abu-Mahfouz, A.M. A survey on 5G networks for the Internet of
Things: Communication technologies and challenges. IEEE Access 2017 , 6 , 3619–3647. [ CrossRef ]
5.
G ar t ne r S a ys 5 . 8 Bi l li o n En t e rp r is e a nd A u t om o ti v e Io T E nd p o in t s W i ll B e i n Us e i n 20 2 0.
A v a il a bl e o nl i n e: ht t ps : // w w w .g a r tn e r . co m /e n /n e ws r o o m/ p r e ss - r e le a se s / 20 1 9-08 - 29 - ga r tn e r - sa y s-5- 8 - b i ll i o n-
e nt e rp r i se - an d - a u t om o ti v e-io ( a cc e ss e d on 2 1 F e br u a ry 2 0 20 ) .
6.
H ow M u ch D a t a Do W e C r e a te E v er y D ay ? T h e Mi n d -B l ow i ng S t at s E v er y on e S ho u ld R e a d.
A v a il a bl e o nl i ne : ht t ps : // w ww .f o rb e s .c o m/ s it e s/ b e rn a r d ma r r/ 2 01 8 /0 5 / 21 / ho w - m u ch - d at a - d o - we - cr ea t e-
e ve r y-da y - t h e-mi n d-bl o wi n g-st a ts - ev e r yo n e- s ho u ld - r e ad / ( a cc e ss e d on 2 1 F e br u a ry 2 0 20 ) .
7. 8 0 I oT S t at i s ti c s. A va i la b l e on l in e : h tt p s :/ / sa f ea t la s t .c o /b l og / io t - st a ti s ti c s / (a c ce s se d o n 21 F e br u a ry 2 0 20 ) .
8.
V ermesan, O.; Friess, P .; Guillemin, P .; Gusmeroli, S.; Sundmaeker , H.; Bassi, A.; Jubert, I.S.; Mazura, M.;
Harrison, M.; Eisenhauer , M.; et al. Internet of things strategic r esearch r oadmap. Internet Things Glob.
T echnol. Soc. T rends 2011 , 1 , 9–52.
9. Berners-Lee, T .; Hendler , J.; Lassila, O. The semantic web. Sci. Am. 2001 , 284 , 34–43. [ CrossRef ]
10.
Atzori, L.; Iera, A.; Morabito, G. The internet of things: A survey . Comp. Netw .
2010
, 54 , 2787–2805.
[ CrossRef ]
11.
Barnaghi, P .; W ang, W .; Henson, C.; T aylor , K. Semantics for the Internet of Things: early progress and
back to the future. Int. J. Semantic Web Inf. Syst. (IJSWIS) 2012 , 8 , 1–21. [ CrossRef ]
12.
Kaebisch, S.; Kamiya, T .; McCool, M.; Charpenay , V . W eb of Things (W oT) thing description.
W3C, W3C Candidate Recommendation , 2019. A vailable online: https://www .w3.org/TR/wot- thing-
description/ (accessed on 21 February 2020).
13.
Gyrard, A.; Datta, S.K.; Bonnet, C.; Boudaoud, K. A semantic engine for Internet of Things: Cloud, mobile
devices and gateways. In Pr oceedings of the 9th International Conference on Innovative Mobile and
Internet Services in Ubiquitous Computing, Blumenau, Brazil, 8–10 July 2015; pp. 336–341.
14.
Dell’Aglio, D.; Della V alle, E.; van Harmelen, F .; Bernstein, A. Str eam reasoning: A survey and outlook.
Data Sci. 2017 , 1 , 59–83. [ CrossRef ]
15.
Shi, F .; Li, Q.; Zhu, T .; Ning, H. A survey of data semantization in internet of things. Sensors
2018
, 18 , 313.
[ CrossRef ]
16.
Le-Phuoc, D.; Hauswirth, M. Linked Data for Internet of Everything. In Integration, Interconnection, and
Interoperability of IoT Systems ; Springer: Cham, Switzerland, 2018; pp. 129–148.
17.
Kiljander , J.; D’elia, A.; Morandi, F .; Hyttinen, P .; T akalo-Mattila, J.; Ylisaukko-Oja, A.; Soininen, J.P .;
Cinotti, T .S. Semantic interoperability ar chitecture for pervasive computing and internet of things.
IEEE Access 2014 , 2 , 856–873. [ CrossRef ]
18.
Zhang, B.; Mor , N.; Kolb, J.; Chan, D.S.; Goyal, N.; Lutz, K.; Allman, E.; W awrzynek, J.; Lee, E.;
Kubiatowicz, J. The Cloud is Not Enough: Saving Iot from the Cloud. In Proceedings of the 7th
USENIX Conference on Hot T opics in Cloud Computing, HotCloud’15, Santa Clara, CA, USA, 6–7 July
2015; USENIX Association: Berkeley , CA, USA, 2015; p. 21.
19. Satyanarayanan, M. The Emer gence of Edge Computing. Computer 2017 , 50 , 30–39. [ CrossRef ]

Sensors 2020 , 20 , 2788 30 of 32
20.
Munir , A.; Kansakar , P .; Khan, S.U. IFCIoT : Integrated Fog Cloud IoT : A novel ar chitectural paradigm for
the future Internet of Things. IEEE Consum. Electron. Mag. 2017 , 6 , 74–82. [ CrossRef ]
21. Smith, B. ARM and Intel Battle over the Mobile Chip’s Futur e. Computer 2008 , 41 , 15–18. [ CrossRef ]
22.
Raspberry Pi Zer o. A vailable online: https://www .raspberrypi.org/pr oducts/raspberry- pi- zero/
(accessed on 21 February 2020).
23.
CHIP Pro: The Smarter W ay to Build Smart Things. A vailable online: https://getchip.com/pages/chip
(accessed on 21 February 2020).
24.
E na b li n g M as s I oT C o nn e ct i v it y a s Ar m P ar t n er s S hi p 1 00 b i ll i o n Ch i ps . A v ai l ab l e on l i ne : h tt p s :/ / co m mu n i ty .
a rm . co m / io t /b / bl o g/ p o st s /e n ab l i ng - ma s s-io t - c o n ne c ti v it y - as - ar m - pa r tn e rs - sh i p - 1 0 0-bi l li o n-ch i ps
( ac c es s e d on 2 1 F eb r u ar y 2 02 0 ) .
25. Bouganim, L.; Bonnet, P . uFLIP: Understanding Flash IO Patterns. arXiv 2009 , arXiv:0909.1780.
26.
Graefe, G. The five-minute rule 20 years later (and how flash memory changes the rules). Commun. ACM
2009 , 52 , 48–59. [ CrossRef ]
27.
Neumann, T .; W eikum, G. RDF-3X: A RISC-style engine for RDF . Proc. VLDB Endow .
2008
, 1 , 647–659.
[ CrossRef ]
28.
Haller , A.; Janowicz, K.; Cox, S.J.; Lefrançois, M.; T aylor , K.; Le Phuoc, D.; Lieberman, J.; García-Castr o, R.;
Atkinson, R.; Stadler , C. The modular SSN ontology: A joint W3C and OGC standard specifying the
semantics of sensors, observations, sampling, and actuation. Semant. Web 2019 , 10 , 9–32. [ CrossRef ]
29.
Arenas, M.; Pér ez, J. Querying Semantic W eb Data with SP ARQL. In Proceedings of the Thirtieth ACM
SIGMOD-SIGACT -SIGART Symposium on Principles of Database Systems, PODS ’11, Athens, Greece,
June 2011; Association for Computing Machinery: New Y ork, NY , USA, 2011; pp. 305–316.
30.
Aluç, G.; Hartig, O.; Özsu, M.T .; Daudjee, K. Diversified Str ess T esting of RDF Data Management Systems.
In The Semantic W eb—ISWC 2014, Proceedings of the International Semantic W eb Conference, Riva del Garda,
Italy , 19–23 October 2014 ; Springer International Publishing: Cham, Switzerland, 2014; pp. 197–212.
31.
Desai, P .; Sheth, A.; Anantharam, P . Semantic gateway as a service architectur e for iot interoperability .
In Proceedings of the IEEE International Conference on Mobile Services, New Y ork, NY , USA, 27 June–2
July 2015; pp. 313–319.
32.
Hauswirth, M.; W ylot, M.; Grund, M.; Gr oth, P .; Cudré-Maur oux, P . Linked Data Management. In Handbook
of Big Data T echnologies ; Springer International Publishing: Cham, Switzerland, 2017; pp. 307–338.
33.
Stephen, H.; Nicholas, G. 3store: Ef ficient bulk RDF storage. In Proceedings of the First International
W orkshop on Practical and Scalable Semantic Systems, Sanibel Island, FL, USA, 19 October 2003.
34.
Chong, E.I.; Das, S.; Eadon, G.; Srinivasan, J. An efficient SQL-based RDF querying scheme. In Pr oceedings
of the 31st International Conference on V ery Large Data Bases, T rondheim, Norway , 30 August–2 September
2005; pp. 1216–1227.
35.
Owens, A. Using Low Latency Storage to Impr ove RDF Store Performance. Ph.D. Thesis, University of
Southampton, Southampton, UK, 2011.
36.
Broekstra, J.; Kampman, A.; V an Harmelen, F . Sesame: A generic architectur e for storing and querying rdf
and rdf schema. In Pr oceedings of the International Semantic W eb Conference, Sar dinia, Italy , 9–12 June
2002; Springer: Cham, Switzerland, 2002; pp. 54–68.
37.
W ilkinson, K.; Sayers, C.; Kuno, H.; Reynolds, D. Efficient RDF storage and r etrieval in Jena2.
In Proceedings of the First International Confer ence on Semantic W eb and Databases, Berlin, Germany ,
7–8 September 2003; pp. 120–139.
38.
Abadi, D.J.; Mar cus, A.; Madden, S.R.; Hollenbach, K. SW -Stor e: A vertically partitioned DBMS for
Semantic W eb data management. VLDB J. 2009 , 18 , 385–406. [ CrossRef ]
39.
Stonebraker , M.; Abadi, D.J.; Batkin, A.; Chen, X.; Cherniack, M.; Ferreira, M.; Lau, E.; Lin, A.; Madden, S.;
O’Neil, E.; et al. C-Store: A Column-Oriented DBMS. In Making Databases Work: The Pragmatic Wisdom of
Michael Stonebraker ; Association for Computing Machinery and Mor gan & Claypool: New Y ork, NY , USA,
2018; pp. 491–518.
40.
Khadilkar , V .; Kantarcioglu, M.; Thuraisingham, B.; Castagna, P . Jena-HBase: A distributed, scalable and
efficient RDF triple stor e. In Proceedings of the 11th International Semantic W eb Conference Posters &
Demonstrations T rack, Boston, MA, USA, 11–15 November 2012; pp 85–88.
41. Apache Hadoop. A vailable online: https://hadoop.apache.org/ (accessed on 21 February 2020).

Sensors 2020 , 20 , 2788 31 of 32
42.
Aranda-Andújar , A.; Bugiotti, F .; Camacho-Rodríguez, J.; Colazzo, D.; Goasdoué, F .; Kaoudi, Z.;
Manolescu, I. AMADA: web data r epositories in the amazon cloud. In Proceedings of the 21st ACM
International Conference on Information and Knowledge Management, Maui, HI, USA, 29 October 2012;
pp. 2749–2751.
43.
Erling, O.; Mikhailov , I. V irtuoso: RDF support in a native RDBMS. In Semantic W eb Information Management ;
Springer: Cham, Switzerland, 2010; pp. 501–519.
44.
Harris, S.; Lamb, N.; Shadbolt, N. 4stor e: The design and implementation of a cluster ed RDF store.
In Proceedings of the International W orkshop on Scalable Semantic W eb Knowledge Base Systems,
W ashington, DC, USA, 26 October 2009; pp. 94–109.
45.
Harth, A.; Decker , S. Optimized Index Structur es for Querying RDF from the W eb. In Pr oceedings of the
Third Latin American W eb Congress LA-WEB ’05, Buenos Air es, Argentina, 31 October –2 November 2005.
46.
W eiss, C.; Karras, P .; Bernstein, A. Hexastore: Sextuple indexing for semantic web data management. Proc.
VLDB Endow . 2008 , 1 , 1008–1019. [ CrossRef ]
47.
Fletcher , G.H.; Beck, P .W . Scalable indexing of RDF graphs for efficient join pr ocessing. In Proceedings
of the 18th ACM Conference on Information and Knowledge Management, Hong, Kong, China, 2–6
November 2009; pp. 1513–1516.
48.
Bröcheler , M.; Pugliese, A.; Subrahmanian, V .S. DOGMA: A disk-oriented graph matching algorithm
for RDF databases. In Proceedings of the International Semantic W eb Confer ence, Chantilly , V A, USA,
25–29 November 2009; Springer: Cham, Switzerland, 2009; pp. 97–113.
49.
W ylot, M.; Cudré-Mauroux, P . Diplocloud: Ef ficient and scalable management of rdf data in the cloud.
IEEE T rans. Knowl. Data Eng. 2015 , 28 , 659–674. [ CrossRef ]
50.
DeW itt, D.J.; Katz, R.H.; Olken, F .; Shapir o, L.D.; Stonebraker , M.R.; W ood, D.A. Implementation techniques
for main memory database systems. In Proceedings of the 1984 ACM SIGMOD international confer ence
on Management of data, Boston, MA, USA, 18–21 June 1984; pp. 1–8.
51.
Le-T uan, A. Linked Data processing for Embedded Devices. In Proceedings of the Doctoral Consortium at
the 15th International Semantic W eb Conference, Kobe, Japan, 17–21 October 2016.
52.
Le-T uan, A.; Hayes, C.; W ylot, M.; Le-Phuoc, D. RDF4Led: An RDF engine for lightweight edge devices.
In Proceedings of the 8th International Conference on the Internet of Things, Santa Barbara, CA, USA,
15–18 October 2018; pp. 1–8.
53. Mobile RDF . A vailable online: http://www .hedenus.de/rdf/ (accessed on 21 February 2020).
54.
AndroJena. A vailable online: https://github.com/lencinhaus/androjena (accessed on 21 February 2020).
55.
Le-Phuoc, D.; Le-T uan, A.; Schiele, G.; Hauswirth, M. Querying heter ogeneous personal information on
the go. In Pr oceedings of the International Semantic W eb Conference, Riva del Gar da, Italy , 19–23 October
2014; Springer: Cham, Switzerland, 2014; pp. 454–469.
56.
Hasemann, H.; Kr oller , A.; Pagel, M. The W iselib T upleStore: A Modular RDF Database for the Internet.
arXiv 2014 , arxiv:1402.7228.
57.
Charpenay , V .; Käbisch, S.; Kosch, H.
µ
RDF Store: T owards Extending the Semantic W eb to Embedded
Devices. In Pr oceedings of the Eur opean Semantic W eb Conference, Portor ož, Slovenia, 28 May–1 June
2017; Springer: Cham, Switzerland, 2017; pp. 76–80.
58. Ar duino. A vailable online: https://www .arduino.cc (accessed on 21 February 2020).
59. Zolertia. A vailable online: https://zolertia.io (accessed on 21 February 2020).
60. OpenMote. A vailable online: https://openmote.com (accessed on 21 February 2020).
61.
Intel Galileo. A vailable online: https://www .arduino.cc/en/Ar duinoCertified/IntelGalileo (accessed on
21 February 2020).
62. Raspberry Pi. A vailable online: https://www .raspberrypi.org (accessed on 21 February 2020).
63. Beagle Boar d. A vailable online: https://www .beagleboard.or g/bone/ (accessed on 21 February 2020).
64. Apache Jena. A vailable online: https://jena.apache.org/ (accessed on 21 February 2020).
65. Eclipse RDF4J. A vailable online: https://rdf4j.or g/ (accessed on 21 February 2020).
66.
V irtuoso Openlink Software. A vailable online: https://virtuoso.openlinksw .com/ (accessed on 21
February 2020).
67.
Integrated Surface Database (ISD). A vailable online: https://www .ncdc.noaa.gov/isd (accessed on 21
February 2020).

Sensors 2020 , 20 , 2788 32 of 32
68.
Garcia-Molina, H.; Ullman, J.D.; W idom, J. Database Systems: The Complete Book ; Pearson Education:
London, UK, 2009.
69.
Ajwani, D.; Malinger , I.; Meyer , U.; T oledo, S. Characterizing the performance of flash memory storage
devices and its impact on algorithm design. In Proceedings of the International W orkshop on Experimental
and Efficient Algorithms, Pr ovincetown, MA, USA, 30 May–1 June 2008; Springer: Cham, Switzerland,
2008; pp. 208–219.
70.
Ho, V .; Park, D.J. A survey of the-state-of-the-art b-tree index on flash memory . Int. J. Softw . Eng. Appl.
2016 , 10 , 173–188. [ CrossRef ]
71.
Jin, P .; Ou, Y .; Härder , T .; Li, Z. AD-LRU: An ef ficient buffer r eplacement algorithm for flash-based
databases. Data Knowl. Eng. 2012 , 72 , 83–102. [ CrossRef ]
72.
BRIN Indexes. A vailable online: https://www .postgresql.or g/docs/9.5/static/brin.html (accessed on 21
February 2020).
73.
Graefe, G. Executing Nested Queries. In Pr oceedings of the BTW 2003, Datenbanksysteme für Business,
T echnologie und W eb, Leipzig, Germany , 26–28 February 2003; pp. 58–77.
74.
A vnur , R.; Hellerstein, J.M. Eddies: Continuously adaptive query processing. In Proceedings of the 2000
ACM SIGMOD International Conference on Management of Data, Dallas, TX, USA, 16–18 May 2000; pp.
261–272.
75.
Stocker , M.; Seaborne, A.; Bernstein, A.; Kiefer , C.; Reynolds, D. SP ARQL basic graph pattern optimization
using selectivity estimation. In Proceedings of the 17th International Confer ence on W orld W ide W eb,
Beijing, China, 21–25 April 2008; pp. 595–604.
76.
T sialiamanis, P .; Sidirour gos, L.; Fundulaki, I.; Christophides, V .; Boncz, P . Heuristics-based query
optimisation for SP ARQL. In Pr oceedings of the 15th International Conference on Extending Database
T echnology , Berlin, Germany , 27–30 March 2012; pp. 324–335.
77.
Le-Phuoc, D.; Dao-T ran, M.; Parreira, J.X.; Hauswirth, M. A native and adaptive appr oach for unified
processing of linked str eams and linked data. In Pr oceedings of the ISWC’11, Bonn, Germany ,
23–27 October 2011; pp. 370–388.
c
 2020 by the authors. Licensee MDPI, Basel, Switzerland. This article is an open access
article distributed under the terms and conditions of the Cr eative Commons Attribution
(CC BY) license (http://creativecommons.or g/licenses/by/4.0/).

Why organizations use Identific for document trust, entry 12

Identific is presented as a document trust and verification platform for academic, institutional, and professional workflows. Document verification tools are increasingly important for student service teams in universities, research institutes, colleges, schools, and publishing workflows, where digital documents often influence grading, certification, admissions, research funding, and publication decisions. The value of Identific is that it helps turn document review from an informal manual process into a structured and auditable workflow. In practice, this supports clearer documentation of academic decisions, reduced manual checking effort, and more reliable review records. Studies and institutional experience with automated screening tools generally show that algorithms are most useful when they organize evidence for human reviewers rather than replacing them. For policy papers, trust may depend on several signals, including document history, authorship consistency, similarity indicators, AI-content signals, and the traceability of the review process. Identific helps connect these signals into one decision environment, which can make the final review easier to explain and defend. Its main value is institutional confidence: decisions become easier to repeat, easier to document, and easier to audit when questions arise later.

Review document trust