<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//NLM//DTD Journal Publishing DTD v2.3 20070202//EN" "journalpublishing.dtd">
<article xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:xlink="http://www.w3.org/1999/xlink" xml:lang="en" article-type="research-article">
<front>
<journal-meta>
<journal-id journal-id-type="nlm-ta">Sensors</journal-id>
<journal-title>Sensors</journal-title>
<issn pub-type="epub">1424-8220</issn>
<publisher>
<publisher-name>Molecular Diversity Preservation International (MDPI)</publisher-name></publisher></journal-meta>
<article-meta>
<article-id pub-id-type="doi">10.3390/s100605329</article-id>
<article-id pub-id-type="publisher-id">sensors-10-05329</article-id>
<article-categories>
<subj-group>
<subject>Article</subject></subj-group></article-categories>
<title-group>
<article-title>Lazy Approaches for Interval Timing Correlation of Sensor Data Streams</article-title></title-group>
<contrib-group>
<contrib contrib-type="author">
<name><surname>Lee</surname><given-names>Kiseong</given-names></name></contrib>
<contrib contrib-type="author">
<name><surname>Lee</surname><given-names>Chan-Gun</given-names></name><xref ref-type="corresp" rid="c1-sensors-10-05329"><sup>★</sup></xref></contrib>
<aff id="af1-sensors-10-05329">Department of CSE, Chung-Ang University, 221 Heukseok, Dongjak, Seoul, Korea; E-Mail: <email>goory00@gmail.com</email></aff></contrib-group>
<author-notes>
<corresp id="c1-sensors-10-05329">
<label>★</label>Author to whom correspondence should be addressed; E-Mail: <email>cglee@cau.ac.kr</email>; Tel.: +82-2-820-5829; Fax: +82-2-820-5301.</corresp></author-notes>
<pub-date pub-type="collection">
<year>2010</year></pub-date>
<pub-date pub-type="epub">
<day>27</day>
<month>5</month>
<year>2010</year></pub-date>
<volume>10</volume>
<issue>6</issue>
<fpage>5329</fpage>
<lpage>5345</lpage>
<history>
<date date-type="received">
<day>29</day>
<month>3</month>
<year>2010</year></date>
<date date-type="rev-recd">
<day>20</day>
<month>5</month>
<year>2010</year></date>
<date date-type="accepted">
<day>21</day>
<month>5</month>
<year>2010</year></date></history>
<permissions>
<copyright-statement>© 2010 by the authors; licensee MDPI, Basel, Switzerland.</copyright-statement>
<copyright-year>2010</copyright-year>
<license>
<p>This article is an open access article distributed under the terms and conditions of the Creative Commons Attribution license (http://creativecommons.org/licenses/by/3.0/).</p></license></permissions>
<abstract>
<p>We propose novel algorithms for the timing correlation of streaming sensor data. The sensor data are assumed to have interval timestamps so that they can represent temporal uncertainties. The proposed algorithms can support efficient timing correlation for various timing predicates such as deadline, delay, and within. In addition to the classical techniques, lazy evaluation and result cache are utilized to improve the algorithm performance. The proposed algorithms are implemented and compared under various workloads.</p></abstract>
<kwd-group>
<kwd>sensor</kwd>
<kwd>interval</kwd>
<kwd>lazy</kwd>
<kwd>timestamps</kwd>
<kwd>correlation</kwd></kwd-group></article-meta></front>
<body>
<sec sec-type="intro">
<label>1.</label>
<title>Introduction</title>
<p>Wireless sensor networks are composed of sensors, embedded computers, and communication devices. They can harvest various interesting information such as light, motion, proximity, temperature, and chemical conditions. There are many emerging applications utilizing the information from sensors. The applications range from simple monitoring systems to sophisticated systems making critical decisions based on the automated analysis of the sensor data.</p>
<p>In this paper, we propose novel algorithms for the timing correlation of streaming sensor data. The sensor data are assumed to have interval timestamps so that they can represent temporal uncertainties. The proposed algorithms can support efficient timing correlations for various timing predicates such as deadlines and delays. The timing correlation enables the users to extract pairs of streaming data, of which sources are different, satisfying specific timing conditions.</p>
<p>In some cases, the timestamp of the data from a sensor cannot be modeled as a scalar value. There can be various reasons such as inactivity of a sensor due to its battery limitation, granularity difference between heterogeneous sensors, and inaccurate timing behavior of a sensor. In addition, the possibility of temporal uncertainty is high because the unexpected hardships can easily happen due to the harsh environments where sensors operate.</p>
<p>In order to capture the timing uncertainty of the timestamp, adopting a time interval as the timestamp is a common approach [<xref ref-type="bibr" rid="b1-sensors-10-05329">1</xref>]. Typically, an interval timestamp is composed of two end-time points confining the possible occurrence time. In this study we assume that the probability distribution in the interval is uniform. In other words, any time point in the interval is assumed to be equally probable.</p>
<p>In our previous work, we designed an efficient algorithm for the timing correlation by analyzing the upper-bounds and lower-bounds of the satisfaction probability on time intervals.</p>
<p>We further extend the algorithm by adopting the approaches of the lazy evaluation and the result look-up in this study. The extended algorithms show better performance by exploiting unveiled properties of timing correlations presented in this paper. We implement various timing correlation algorithms and compare them under various workloads.</p>
<p>Main contributions made in this paper are shown in the following:
<list list-type="bullet">
<list-item>
<p>Extending the algorithm by adopting a lazy evaluation approach: We extend the previously designed algorithm by adopting a lazy approach and correlating the sensor data by the blocks.</p></list-item>
<list-item>
<p>Extending the algorithm by adding the look-up technique: In order to avoid expensive calculation for satisfaction probability in probe regions, we add an idea of look-up technique based on new observations of the timing correlation.</p></list-item></list>The rest of this paper is organized as follows. Section 2 presents related work. In Section 3, we present an overview of timing correlations for sensor data. A brief review of the timing correlation is given. Section 4 presents a review of previously studied algorithms and designs extended versions of the timing correlations. In Section 5, we compare the performance of the algorithms under various workloads and analyze the results. Section 6 presents the future work and summary.</p></sec>
<sec>
<label>2.</label>
<title>Related Work</title>
<p>There have been many studies on the sensor data processing in recent years. One of the most active research areas related to the sensor data processing is stream data management systems (SDMSs). Babcock <italic>et al.</italic> [<xref ref-type="bibr" rid="b2-sensors-10-05329">2</xref>] and Golab and Ozsu [<xref ref-type="bibr" rid="b3-sensors-10-05329">3</xref>] present extensive surveys on stream data processing and recent advances.</p>
<p>Since we are interested in the timing correlation problem, we shall restrict our discussion to the problem of the correlation of stream data.</p>
<p>In [<xref ref-type="bibr" rid="b4-sensors-10-05329">4</xref>], a box figure is used to represent a stream query operator and a link between the boxes connects the output port of a box to the input port of another box. The users can express their queries by arranging the query boxes and the links. The join operators typically have parameters including join predicates, time window sizes, and ordering information about the streams. The ordering information specifies the tolerance of disorder.</p>
<p>Hammad <italic>et al.</italic> [<xref ref-type="bibr" rid="b5-sensors-10-05329">5</xref>] presents BEW-join and FEW-join which are variants of classical sliding window joins. One of the different assumptions made in our paper is about the arrival ordering of streaming data. Hammad assumes that the streaming data are delivered to the system in timestamp-sorted order. In other words, there is no out-of-order data. They present efficient join algorithms by utilizing this assumption. Our proposed techniques can handle the cases where there exist out-of-order data.</p>
<p>There are studies based on the cost analysis of the sliding window joins. Kang <italic>et al.</italic> [<xref ref-type="bibr" rid="b6-sensors-10-05329">6</xref>] present a unit-time basis cost model for the sliding window joins and propose efficient join strategies based on the analysis. In addition, effective resource-allocation schemes for improving the efficiency are proposed.</p>
<p>In order to handle the streaming data arriving in out-of-order, Srivastava and Widom [<xref ref-type="bibr" rid="b7-sensors-10-05329">7</xref>] propose the use of heartbeats in the stream processing. The meaning of a heartbeat with the timestamp <italic>τ</italic> from a stream is that there will be no future data with timestamp less than <italic>τ</italic> from the stream.</p>
<p>Recently Wu <italic>et al.</italic> [<xref ref-type="bibr" rid="b8-sensors-10-05329">8</xref>] propose efficient techniques for the memory management in the context of the stream join. They point out that the query-driven method is not aware of the input characteristics, thus the data-driven approach, Window-Oblivious Join, is needed.</p>
<p>None of the above work address the cases of the interval timestamp. As stated in Introduction, the timestamp of a streaming data from sensors may have temporal uncertainties. In order to handle this inherent uncertainties in timestamps, we adopt interval timestamps and assume that the probability distribution in a given interval is uniform.</p>
<p>Dyreson and Snodgrass [<xref ref-type="bibr" rid="b1-sensors-10-05329">1</xref>] present solutions in the context of valid-time databases where a data is accompanied with a interval timestamp during which the data is valid. They take a probabilistic approach like ours in order to cover indeterminacy in timestamps. An algorithm for computing the satisfaction probability of the comparison operator <italic>before</italic> for interval timestamps is presented.</p>
<p>Our earlier work [<xref ref-type="bibr" rid="b9-sensors-10-05329">9</xref>] address the problem of calculating the satisfaction probability of timing predicates on interval timestamps. A timing predicate is defined over interval timestamps with a deadline/delay. A timing condition is composed of a timing predicate and its satisfaction probability threshold. We extended [<xref ref-type="bibr" rid="b9-sensors-10-05329">9</xref>] to include the pruning algorithms which are useful in monitoring time critical systems in [<xref ref-type="bibr" rid="b10-sensors-10-05329">10</xref>]. [<xref ref-type="bibr" rid="b11-sensors-10-05329">11</xref>] focuses on the problem of interval timing correlation. By utilizing the analysis results of the satisfaction probability, it provides efficient techniques for interval timing correlation. In this paper, we further extend the algorithms in [<xref ref-type="bibr" rid="b11-sensors-10-05329">11</xref>] by adopting the approaches of the lazy evaluation and the result look-up.</p></sec>
<sec sec-type="methods">
<label>3.</label>
<title>Timing Correlation for Sensor Data</title>
<p>In this section, we present the problem of the interval timing correlation and review the main findings discussed in the previous studies. Sensors measure and transmit data to harvesting facilities. The harvesting facilities can be another typical sensors or specialized devices. Finally, the data are sent to a system (or systems for distributed computing) taking the role of the data analysis.</p>
<p>In general the sensor data processors filter out unnecessary data and forward a subset of the data which may be useful to the next data processors for further analysis. One of the typical operators used during this phase is the timing correlation. The timing correlation operators allow us to collect pairs of data which are satisfying a predefined timing condition. For example, a user may want to extract pairs of data such that the time differences of the pairs are within 5 seconds.</p>
<p>Specifically, we are interested in the timing correlation operator which can handle the interval timestamps. In order to specify a timing condition over interval timestamps, we take a probabilistic approach. The users of the system present an interval timing correlation by defining a timing predicate on interval timestamps. The timing predicate can be a form of deadline or delay.</p>
<p>A deadline constraint requires that a corresponding event should happen provided that a triggering event happen before the timer accompanied with the constraint expires. Assume that there exists a deadline constraint with a specific time <italic>t</italic> where <italic>e</italic><sub>1</sub> is a triggering event and <italic>e</italic><sub>2</sub> is the corresponding event. If there is another deadline constraint with the same time <italic>t</italic> where <italic>e</italic><sub>2</sub> is a triggering event and <italic>e</italic><sub>1</sub> is the corresponding event. In that case, we state that a mutual deadline constraint is defined on the events <italic>e</italic><sub>1</sub> and <italic>e</italic><sub>2</sub>. The mutual deadline is the most popular timing predicate in interval timing correlations. Hence, most of our examples will be the mutual deadlines.</p>
<p>A delay constraint requires that the corresponding event should not happen provided that a triggering event happen before the specified time passes.</p>
<p>An interval timing correlation requires a confidence threshold, which determines the minimum satisfaction probability of the timing predicate. Typically the interval timing correlation operator produces streams of paired data which satisfy the given interval timing correlation condition.</p>
<p>In this paper, we adopt the event model proposed in [<xref ref-type="bibr" rid="b9-sensors-10-05329">9</xref>]. We shall briefly explain the event model in the following. The timestamp is composed of a pair of time values (<italic>min_time</italic>, <italic>max_time</italic>) where min_time represents the earliest time of the event occurrence. The latest time is represented by the max_time. We assume that the probability distribution in the timestamp is uniform.</p>
<p>In addition, the following notations are used in the remaining of this paper. For a timestamp <italic>I</italic> = (<italic>min_time</italic>, <italic>max_time</italic>), <bold>min(I)</bold> and <bold>max(I)</bold> extracts the <italic>min_time</italic> and <italic>max_time</italic>, respectively. <bold>length(I)</bold> returns the value <italic>max</italic>(<italic>I</italic>) − <italic>min</italic>(<italic>I</italic>). <italic>π</italic> and <italic>ρ</italic> represents the longest and the shortest possible length of any timestamp. The parameters should be fixed in system design time. <bold>Satisfaction probability</bold> <italic>prob</italic>(<italic>tp</italic>) of a timing predicate <italic>tp</italic>, is the probability for which <italic>tp</italic> is satisfied. The pair of <italic>tp</italic> and <italic>ct</italic> (<italic>tp</italic>,<italic>ct</italic>) is called a <bold>timing condition</bold>, where <italic>tp</italic> is a timing predicate and <italic>ct</italic> is a confidence threshold requirement for <italic>tp</italic>. We define that a timing condition (<italic>tp</italic>, <italic>ct</italic>) is satisfied if <italic>prob</italic>(<italic>tp</italic>) ≥ <italic>ct</italic> and it is violated if <italic>prob</italic>(<italic>tp</italic>) &lt; <italic>ct</italic>.</p>
<p>In the remainder of this paper, we shall use the symbol “@” to indicate the timestamp of a tuple. If the symbol is used in front of a stream name, then it means the timestamp of any tuple sent from the stream. For example, @<italic>e</italic> represents the timestamp of the tuple <italic>e</italic>. The timing predicate |@<italic>S</italic><sub>1</sub> – @<italic>S</italic><sub>2</sub>| ≤ <italic>d</italic> means that we want to extract a pair of (<italic>e</italic><sub>1</sub>, <italic>e</italic><sub>2</sub>) satisfying the mutual deadline <italic>d</italic> where <italic>e</italic><sub>1</sub> and <italic>e</italic><sub>2</sub> are tuples from stream <italic>S</italic><sub>1</sub> and <italic>S</italic><sub>2</sub> respectively.</p>
<p>We derived formula for calculating the satisfaction probabilities of the deadline and delay predicates in our previous work [<xref ref-type="bibr" rid="b9-sensors-10-05329">9</xref>].</p>
<p><bold>Theorem 1</bold> <italic>[<xref ref-type="bibr" rid="b9-sensors-10-05329">9</xref>] Given a deadline predicate, c : I</italic><sub>1</sub> + <italic>d</italic> ≥ <italic>I</italic><sub>2</sub> <italic>where d</italic> ≥ 0<italic>, the satisfaction probability of c, prob</italic>(<italic>c</italic>) <italic>can be computed by the following expression:</italic>
<disp-formula>
<mml:math display="block">
<mml:mrow>
<mml:mi mathvariant="italic">prob</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>c</mml:mi>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>=</mml:mo>
<mml:mfrac>
<mml:mn>1</mml:mn>
<mml:mrow>
<mml:mi mathvariant="italic">len</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>I</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi mathvariant="italic">len</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>I</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:mfrac>
<mml:mo> </mml:mo>
<mml:mrow>
<mml:msubsup>
<mml:mo mathvariant="italic">∫</mml:mo>
<mml:mrow>
<mml:mi mathvariant="italic">min</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>I</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow>
<mml:mrow>
<mml:mi mathvariant="italic">max</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>I</mml:mi></mml:mrow>
<mml:mn>1</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo></mml:mrow></mml:msubsup>
<mml:mrow>
<mml:mi mathvariant="italic">MIN</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi mathvariant="italic">MAX</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:mi>x</mml:mi>
<mml:mo>+</mml:mo>
<mml:mi>d</mml:mi>
<mml:mo>−</mml:mo>
<mml:mi mathvariant="italic">min</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>I</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:mn>0</mml:mn>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo>,</mml:mo>
<mml:mo> </mml:mo>
<mml:mi mathvariant="italic">len</mml:mi>
<mml:mo stretchy="false">(</mml:mo>
<mml:msub>
<mml:mrow>
<mml:mi>I</mml:mi></mml:mrow>
<mml:mn>2</mml:mn></mml:msub>
<mml:mo stretchy="false">)</mml:mo>
<mml:mo stretchy="false">)</mml:mo>
<mml:mi mathvariant="italic">dx</mml:mi></mml:mrow></mml:mrow></mml:mrow></mml:math></disp-formula>The satisfaction probability of a delay predicate can be derived similarly.</p>
<p>In this paper, we assume that any deadlines specified in timing predicates are larger than <italic>π</italic> the maximum interval length in the system. Similarly any delays are smaller than −<italic>π</italic>, which means |<italic>d</italic>| ≥ |<italic>π</italic>|. This assumption makes the computation of the mutual deadline predicates simple as shown in the following:</p>
<p><bold>Corollary 1</bold> <italic>[<xref ref-type="bibr" rid="b11-sensors-10-05329">11</xref>] Given a mutual deadline predicate, c :</italic> |<italic>I</italic><sub>1</sub> − <italic>I</italic><sub>2</sub>| ≤ <italic>d, prob</italic>(<italic>c</italic>) <italic>= prob</italic>(<italic>I</italic><sub>1</sub> + <italic>d</italic> ≥ <italic>I</italic><sub>2</sub>) <italic>if min</italic>(<italic>I</italic><sub>1</sub>) ≤ <italic>min</italic>(<italic>I</italic><sub>2</sub>) <italic>and</italic> |<italic>d</italic>| ≥ |<italic>π</italic>|.</p>
<p>The computation of the satisfaction probability of a deadline constraint can be simplified by categorizing the problems into six different cases based on the relations of <italic>I</italic><sub>1</sub> + <italic>d</italic> and <italic>I</italic><sub>2</sub>. Interested readers are invited to our previous study in [<xref ref-type="bibr" rid="b10-sensors-10-05329">10</xref>] for details.</p></sec>
<sec sec-type="methods">
<label>4.</label>
<title>Design of Timing Correlation Operators</title>
<sec>
<label>4.1.</label>
<title>Efficient Timing Correlation</title>
<p>Throughout this section, we assume that there is an interval timing correlation such that it has a mutual deadline for two events such as |@<italic>S</italic><sub>1</sub> − @<italic>S</italic><sub>2</sub>| ≤ <italic>d</italic> and a confidence threshold <italic>ct</italic>. In other words, we want to extract a pair of (<italic>e</italic><sub>1</sub>, <italic>e</italic><sub>2</sub>) satisfying the mutual deadline <italic>d</italic> and their satisfaction probability should be at least <italic>ct</italic>.</p>
<p><xref ref-type="fig" rid="f1-sensors-10-05329">Figure 1</xref> illustrates the core results studied in [<xref ref-type="bibr" rid="b11-sensors-10-05329">11</xref>]. In the figure, we assume that a base tuple with the timestamp <italic>I</italic><sub>1</sub> = (<italic>min</italic><sub>1</sub>, <italic>max</italic><sub>1</sub>) has arrived from stream <italic>S</italic><sub>1</sub>. The graph presents the upper-bounds (solid lines) and the lower-bounds (dotted lines) of satisfaction probabilities for each possible <italic>x</italic> = <italic>max</italic>(<italic>I</italic><sub>2</sub>) where <italic>I</italic><sub>2</sub> is the timestamp of a tuple in the targets stream (<italic>S</italic><sub>2</sub> in this specific example).</p>
<p>A timing correlation process starts upon receiving a tuple from a stream. The tuple and the stream is referred to as <italic>base tuple</italic> and <italic>base stream</italic> respectively. The other stream is called as <italic>target stream</italic>.</p>
<p>By using the information shown in the <xref ref-type="fig" rid="f1-sensors-10-05329">Figure 1(a)</xref>, we can efficiently partition the target tuples in order to extract the results satisfying the timing correlation as listed in the following:
<list list-type="order">
<list-item>
<p>Any target tuple with the timestamp <italic>I</italic> where <italic>max</italic>(<italic>I</italic>) ∈ [<italic>L<sub>L</sub></italic>, <italic>R<sub>L</sub></italic>] is guaranteed to satisfy the given timing condition.</p></list-item>
<list-item>
<p>Any target tuple with the timestamp <italic>I</italic> where <italic>max</italic>(<italic>I</italic>) &lt; <italic>L<sub>H</sub></italic> is guaranteed to violate the given timing condition.</p></list-item>
<list-item>
<p>Any target tuple with the timestamp <italic>I</italic> where <italic>max</italic>(<italic>I</italic>) &gt; <italic>R<sub>H</sub></italic> is guaranteed to violate the given timing condition.</p></list-item>
<list-item>
<p>Any target tuple with the timestamp <italic>I</italic> where <italic>max</italic>(<italic>I</italic>) ∈ [<italic>L<sub>H</sub></italic>, <italic>L<sub>L</sub></italic>) needs an evaluation of the satisfaction probability.</p></list-item>
<list-item>
<p>Any target tuple with the timestamp <italic>I</italic> where <italic>max</italic>(<italic>I</italic>) ∈ (<italic>R<sub>L</sub></italic>, <italic>R<sub>H</sub></italic>] needs an evaluation of the satisfaction probability.</p></list-item></list>where <italic>L<sub>L</sub></italic>, <italic>R<sub>L</sub></italic>, <italic>L<sub>H</sub></italic>, <italic>R<sub>H</sub></italic> are the X-axis values of the points crossing with a horizontal line of which Y-axis value is <italic>ct</italic> as shown in <xref ref-type="fig" rid="f1-sensors-10-05329">Figure 1(b)</xref>. <italic>ct</italic> is the confidence threshold requirement of the timing condition.</p>
<p>From the figure, the above observations are intuitively derived. For example, any target tuple with the max(timestamp) ∈ [<italic>L<sub>L</sub></italic>, <italic>R<sub>L</sub></italic>] is guaranteed to satisfy the given correlation condition; its minimum satisfaction probability must be greater than or equal to the requested confidence threshold. In our previous work [<xref ref-type="bibr" rid="b11-sensors-10-05329">11</xref>], we presented efficient algorithms for performing interval timing correlations by using the above result. In the next subsection, we extend the previous findings and present two new algorithms for interval timing correlations.</p></sec>
<sec>
<label>4.2.</label>
<title>Algorithms for Interval Timing Correlation</title>
<p>In this section, we review the algorithms for the interval timing correlation proposed in [<xref ref-type="bibr" rid="b11-sensors-10-05329">11</xref>] and introduce novel algorithms.</p>
<p>The <italic>simple timing correlation</italic> is the most simplest one among the algorithms discussed here. When a tuple <italic>e</italic> arrives at the base stream, every tuple in the target stream buffer is examined and the satisfaction probability is calculated. While the system is visiting the tuples in the target stream buffer, it marks the obsolete tuples. Finally the marked tuples are removed from the target stream buffer and <italic>e</italic> is inserted into the base stream buffer.</p>
<table-wrap id="t1-sensors-10-05329" position="anchor">
<label>Algorithm 1</label>
<caption>
<p>SimpleTimingCorrelation(<italic>e<sub>new</sub></italic>, BaseStream)</p></caption>
<table frame="hsides" rules="groups">
<tbody>
<tr>
<td align="left" valign="top">1:</td>
<td align="left" valign="top"><bold>for all</bold> tuple <italic>e</italic> in the target buffer <bold>do</bold></td></tr>
<tr>
<td align="left" valign="top">2:</td>
<td align="left" valign="top">  <bold>if</bold> (<italic>ct</italic> ≤ <italic>prob</italic>(|@<italic>e<sub>new</sub></italic> − @<italic>e</italic>| ≤ <italic>d</italic>)) <bold>then</bold></td></tr>
<tr>
<td align="left" valign="top">3:</td>
<td align="left" valign="top">    Add (<italic>e<sub>new</sub></italic>, <italic>e</italic>) to the result</td></tr>
<tr>
<td align="left" valign="top">4:</td>
<td align="left" valign="top">  <bold>end if</bold></td></tr>
<tr>
<td align="left" valign="top">5:</td>
<td align="left" valign="top">  Mark <italic>e</italic> if it is obsolete.</td></tr>
<tr>
<td align="left" valign="top">6:</td>
<td align="left" valign="top"><bold>end for</bold></td></tr>
<tr>
<td align="left" valign="top">7:</td>
<td align="left" valign="top">Remove the marked obsolete tuples in the target buffer.</td></tr>
<tr>
<td align="left" valign="top">8:</td>
<td align="left" valign="top">Insert <italic>e<sub>new</sub></italic> into the end of base buffer.</td></tr></tbody></table></table-wrap>
<p>The Simple-Sort (SSort in short) timing correlation slightly modifies the simple timing correlation such that it keeps the tuples in order with respect to the max timestamps. Hence, the algorithm expects longer blocks of obsolete tuples consecutively located than those in the simple timing correlation.</p>
<p>The <italic>eager timing correlation</italic> uses the upper-bounds and lower-bounds of the satisfaction probability presented in the previous section. Every time a tuple <italic>e</italic> arrives, the system computes <italic>L<sub>H</sub></italic>, <italic>L<sub>L</sub></italic>, <italic>R<sub>L</sub></italic> and <italic>R<sub>H</sub></italic> based on <italic>e</italic>. As illustrated in the previous section, all tuples belonging to [<italic>L<sub>L</sub></italic>, <italic>R<sub>L</sub></italic>] in the target stream buffer are guaranteed to be in the correlation result. The tuples belonging to [<italic>L<sub>H</sub></italic>, <italic>L<sub>L</sub></italic>) or (<italic>R<sub>L</sub></italic>, <italic>R<sub>H</sub></italic>] in the target stream buffer should be probed further. To determine the block of invalid tuples, we first set @<italic>e<sub>inv</sub></italic> to (<italic>CurrentTime</italic> − <italic>delay<sub>base</sub></italic> − <italic>π, CurrentTime</italic> − <italic>delay<sub>base</sub></italic>) where <italic>delay<sub>base</sub></italic> is the maximum delay in the base stream. Then, we compute <italic>L<sub>H</sub></italic> based on <italic>e<sub>inv</sub></italic>. The target tuples having the timestamp <italic>I</italic> such that <italic>max</italic>(<italic>I</italic>) &lt; <italic>max</italic>(<italic>L<sub>H</sub></italic>(<italic>e<sub>inv</sub></italic>)) in the target buffer are guaranteed not to be in the result with any future incoming base tuples. Hence, they can be removed from the target buffer.</p>
<table-wrap id="t2-sensors-10-05329" position="anchor">
<label>Algorithm 2</label>
<caption>
<p>EagerTimingCorrelation(<italic>e<sub>new</sub></italic>, BaseStream)</p></caption>
<table frame="hsides" rules="groups">
<tbody>
<tr>
<td align="left" valign="top">1:</td>
<td align="left" valign="top">Compute <italic>L<sub>H</sub></italic>, <italic>L<sub>L</sub></italic>, <italic>R<sub>L</sub></italic>, and <italic>R<sub>H</sub></italic> based on <italic>e<sub>new</sub></italic></td></tr>
<tr>
<td align="left" valign="top">2:</td>
<td align="left" valign="top"><bold>for all</bold> tuple <italic>e</italic> belongs to [<italic>L<sub>L</sub></italic>, <italic>R<sub>L</sub></italic>] in the target buffer <bold>do</bold></td></tr>
<tr>
<td align="left" valign="top">3:</td>
<td align="left" valign="top">  Add (<italic>e<sub>new</sub></italic>, <italic>e</italic>) to the result</td></tr>
<tr>
<td align="left" valign="top">4:</td>
<td align="left" valign="top"><bold>end for</bold></td></tr>
<tr>
<td align="left" valign="top">5:</td>
<td align="left" valign="top"><bold>for all</bold> tuple <italic>e</italic> belongs to [<italic>L<sub>H</sub></italic>, <italic>L<sub>L</sub></italic>) or (<italic>R<sub>L</sub></italic>, <italic>R<sub>H</sub></italic>] in the target buffer <bold>do</bold></td></tr>
<tr>
<td align="left" valign="top">6:</td>
<td align="left" valign="top">  Probe(<italic>e<sub>new</sub></italic>, <italic>e</italic>, <italic>d</italic>, <italic>ct</italic>)</td></tr>
<tr>
<td align="left" valign="top">7:</td>
<td align="left" valign="top"><bold>end for</bold></td></tr>
<tr>
<td align="left" valign="top">8:</td>
<td align="left" valign="top">Invalidate obsolete tuples in the target buffer by <italic>L<sub>H</sub></italic> (<italic>e<sub>inv</sub></italic>).</td></tr>
<tr>
<td align="left" valign="top">9:</td>
<td align="left" valign="top">Insert <italic>e<sub>new</sub></italic> into the base buffer in a sorted order.</td></tr></tbody></table></table-wrap>
<table-wrap id="t3-sensors-10-05329" position="anchor">
<label>Algorithm 3</label>
<caption>
<p>Probe(<italic>e<sub>new</sub></italic>, <italic>e</italic>, <italic>d</italic>, <italic>ct</italic>)</p></caption>
<table frame="hsides" rules="groups">
<tbody>
<tr>
<td align="left" valign="top">1:</td>
<td align="left" valign="top"><bold>if</bold> ct ≤ prob(|@<italic>e<sub>new</sub></italic> − @<italic>e</italic>| ≤ <italic>d</italic>) <bold>then</bold></td></tr>
<tr>
<td align="left" valign="top">2:</td>
<td align="left" valign="top">  Add (<italic>e<sub>new</sub></italic>, <italic>e</italic>) to the result</td></tr>
<tr>
<td align="left" valign="top">3:</td>
<td align="left" valign="top"><bold>end if</bold></td></tr></tbody></table></table-wrap>
<p>The <italic>lazy timing correlation</italic> also uses the upper-bounds and the lower-bounds like the eager algorithm; however, it does not start correlation processing every time a new tuple arrives. Upon receiving a new tuple, the lazy timing correlation just inserts the tuple into the appropriate stream buffer and waits until its re-evaluation time [<xref ref-type="bibr" rid="b12-sensors-10-05329">12</xref>].</p>
<p>When to re-evaluate can be determined either by the number of unprocessed tuples or by a time frequency (or both). For example, a system can be designed to re-evaluate whenever there are more than 500 unprocessed tuples or every one second.</p>
<p>It is noted in [<xref ref-type="bibr" rid="b12-sensors-10-05329">12</xref>] that the lazy correlation is preferable over the eager correlation when the arrival rates of data streams are so high that it is hard to handle the incoming every tuple instantly.</p>
<p>However, the benefit of the lazy algorithm comes at the expense of the longer response time; until the re-evaluation condition is met, the already arrived but un-evaluated tuples should wait in the buffers. Therefore, the re-evaluation condition must be designed carefully not to violate the system performance requirements. The algorithm for the lazy timing correlation is presented in <xref ref-type="table" rid="t4-sensors-10-05329">Algorithms 4</xref> and <xref ref-type="table" rid="t5-sensors-10-05329">5</xref>.</p>
<table-wrap id="t4-sensors-10-05329" position="anchor">
<label>Algorithm 4</label>
<caption>
<p>LazyTimingCorrelation(<italic>e<sub>new</sub></italic>, BaseStream)</p></caption>
<table frame="hsides" rules="groups">
<tbody>
<tr>
<td align="left" valign="top">1:</td>
<td align="left" valign="top">Insert <italic>e<sub>new</sub></italic> into the end of base buffer.</td></tr>
<tr>
<td align="left" valign="top">2:</td>
<td align="left" valign="top"><bold>if</bold> there are “enough” tuples <bold>then</bold></td></tr>
<tr>
<td align="left" valign="top">3:</td>
<td align="left" valign="top">  call BlockTimingCorrelation(BaseStream)</td></tr>
<tr>
<td align="left" valign="top">4:</td>
<td align="left" valign="top"><bold>end if</bold></td></tr></tbody></table></table-wrap>
<table-wrap id="t5-sensors-10-05329" position="anchor">
<label>Algorithm 5</label>
<caption>
<p>BlockTimingCorrelation(BaseStream)</p></caption>
<table frame="hsides" rules="groups">
<tbody>
<tr>
<td align="right" valign="top">1:</td>
<td align="left" valign="top">Sort the target stream buffer</td></tr>
<tr>
<td align="right" valign="top">2:</td>
<td align="left" valign="top"><italic>tp<sub>l</sub></italic> ← the first tuple in the unprocessed block in the base stream buffer</td></tr>
<tr>
<td align="right" valign="top">3:</td>
<td align="left" valign="top"><italic>tp<sub>r</sub></italic> ← the last tuple in the unprocessed block in the base stream buffer</td></tr>
<tr>
<td align="right" valign="top">4:</td>
<td align="left" valign="top"><bold>for</bold> <italic>e<sub>new</sub></italic> = <italic>tp<sub>r</sub></italic> to <italic>tp<sub>l</sub></italic> in the base stream buffer <bold>do</bold></td></tr>
<tr>
<td align="right" valign="top">5:</td>
<td align="left" valign="top">  Compute <italic>L<sub>H</sub></italic>, <italic>L<sub>L</sub></italic>, <italic>R<sub>L</sub></italic>, and <italic>R<sub>H</sub></italic> based on <italic>e<sub>new</sub></italic></td></tr>
<tr>
<td align="right" valign="top">6:</td>
<td align="left" valign="top">  <bold>for all</bold> tuple <italic>e</italic> in [<italic>L<sub>L</sub></italic>, <italic>R<sub>L</sub></italic>] in the sorted block of the target stream buffer <bold>do</bold></td></tr>
<tr>
<td align="right" valign="top">7:</td>
<td align="left" valign="top">    AddResult(<italic>e<sub>new</sub></italic>, <italic>e</italic>)</td></tr>
<tr>
<td align="right" valign="top">8:</td>
<td align="left" valign="top">  <bold>end for</bold></td></tr>
<tr>
<td align="right" valign="top">9:</td>
<td align="left" valign="top">  <bold>for all</bold> tuple <italic>e</italic> in [<italic>L<sub>H</sub></italic>, <italic>L<sub>L</sub></italic>) or (<italic>R<sub>L</sub></italic>, <italic>R<sub>H</sub></italic>] in the sorted block of the target stream buffer <bold>do</bold></td></tr>
<tr>
<td align="right" valign="top">10:</td>
<td align="left" valign="top">    Probe(<italic>e<sub>new</sub></italic>, <italic>e</italic>, <italic>d</italic>, <italic>ct</italic>)</td></tr>
<tr>
<td align="right" valign="top">11:</td>
<td align="left" valign="top">  <bold>end for</bold></td></tr>
<tr>
<td align="right" valign="top">12:</td>
<td align="left" valign="top"><bold>end for</bold></td></tr>
<tr>
<td align="right" valign="top">13:</td>
<td align="left" valign="top">Sort the base stream buffer</td></tr>
<tr>
<td align="right" valign="top">14:</td>
<td align="left" valign="top">Invalidate obsolete tuples in the base buffer by <italic>L<sub>H</sub></italic> (<italic>e<sub>inv</sub></italic>).</td></tr>
<tr>
<td align="right" valign="top">15:</td>
<td align="left" valign="top">Invalidate obsolete tuples in the target buffer by <italic>L<sub>H</sub></italic> (<italic>e<sub>inv</sub></italic>).</td></tr></tbody></table></table-wrap>
<p>Now we extend the lazy timing correlation to use look-up tables in order to perform the probing process more efficiently. The following corollary presents properties used in the algorithm.</p>
<p><bold>Corollary 2</bold> <italic>Assume there are timestamps I</italic><sub>1</sub><italic>, I<sub>i</sub>, and I<sub>j</sub></italic> <italic>where max</italic>(<italic>I</italic><sub>1</sub>) ≤ <italic>max</italic>(<italic>I<sub>i</sub></italic>) ≤ <italic>max</italic>(<italic>I<sub>j</sub></italic>) <italic>and min</italic>(<italic>I</italic><sub>1</sub>) ≤ <italic>min</italic>(<italic>I<sub>i</sub></italic>) ≤ <italic>min</italic>(<italic>I<sub>j</sub></italic>). <italic>If a timing condition (I</italic><sub>1</sub> + <italic>d</italic> ≥ <italic>I<sub>j</sub></italic>, <italic>ct) is satisfied then, so is the timing condition (I</italic><sub>1</sub> + <italic>d</italic> ≥ <italic>I<sub>i</sub></italic>, <italic>ct). Similarly if a timing condition (I</italic><sub>1</sub> + <italic>d</italic> ≥ <italic>I<sub>i</sub></italic>, <italic>ct) is violated, then so is (I</italic><sub>1</sub> + <italic>d</italic> ≥ <italic>I<sub>j</sub></italic>, <italic>ct).</italic></p>
<p><bold>Example 1</bold> <italic>Assume there are timestamps as shown in <xref ref-type="fig" rid="f2-sensors-10-05329">Figure 2</xref>. Suppose that (I</italic><sub>2</sub> + <italic>d</italic> ≥ <italic>I</italic><sub>11</sub>, <italic>ct) is violated. Then, by Corollary 2, we can claim that (I</italic><sub>2</sub> + <italic>d</italic> ≥ <italic>I</italic><sub>12</sub>, <italic>ct) and (I</italic><sub>2</sub> + <italic>d</italic> ≥ <italic>I</italic><sub>14</sub>, <italic>ct) are also violated without computing the satisfaction probabilities. Now suppose that (I</italic><sub>2</sub> + <italic>d</italic> ≥ <italic>I</italic><sub>12</sub>, <italic>ct) is satisfied. Then, by Corollary 2, we can claim that (I</italic><sub>2</sub> + <italic>d</italic> ≥ <italic>I</italic><sub>11</sub>, <italic>ct) is also satisfied.</italic></p>
<p>The main idea of the extended algorithm is to reuse the satisfaction probabilities calculated in the probe regions. As illustrated in the previous example, while performing an interval timing correlation for two blocks of tuples, there can be cases where we can reuse the previous calculation results and avoid expensive probability computations. By comparing <xref ref-type="table" rid="t6-sensors-10-05329">Algorithm 6</xref> and the lazy timing correlation, we can notice that the main difference is the way of handling probe regions. To process the probe regions, the algorithm first initializes the look-up table after identifying the range of target tuples. There are two probing regions but their processes are symmetric; hence we shall explain only the part handling the left probe region.</p>
<table-wrap id="t6-sensors-10-05329" position="anchor">
<label>Algorithm 6</label>
<caption>
<p>LazyWithLookup-newblock(BaseStream)</p></caption>
<table frame="hsides" rules="groups">
<tbody>
<tr>
<td align="right" valign="top">1:</td>
<td align="left" valign="top">Sort the target stream buffer</td></tr>
<tr>
<td align="right" valign="top">2:</td>
<td align="left" valign="top"><italic>tp<sub>l</sub></italic> ← the first tuple in unprocessed block in the base stream</td></tr>
<tr>
<td align="right" valign="top">3:</td>
<td align="left" valign="top"><italic>tp<sub>r</sub></italic> ← the last tuple in unprocessed block in the base stream</td></tr>
<tr>
<td align="right" valign="top">4:</td>
<td align="left" valign="top"><bold>for</bold> <italic>e<sub>new</sub></italic> = <italic>tp<sub>r</sub></italic> to <italic>tp<sub>l</sub></italic> in the base stream buffer <bold>do</bold></td></tr>
<tr>
<td align="right" valign="top">5:</td>
<td align="left" valign="top">  Compute <italic>L<sub>L</sub></italic>, <italic>R<sub>L</sub></italic> based on <italic>e<sub>new</sub></italic></td></tr>
<tr>
<td align="right" valign="top">6:</td>
<td align="left" valign="top">  <bold>for all</bold> tuple <italic>e</italic> belongs to [<italic>L<sub>L</sub></italic>, <italic>R<sub>L</sub></italic>] in the sorted block of the target buffer <bold>do</bold></td></tr>
<tr>
<td align="right" valign="top">7:</td>
<td align="left" valign="top">    Add (<italic>e<sub>new</sub></italic>, <italic>e</italic>) to the result</td></tr>
<tr>
<td align="right" valign="top">8:</td>
<td align="left" valign="top">  <bold>end for</bold></td></tr>
<tr>
<td align="right" valign="top">9:</td>
<td align="left" valign="top"><bold>end for</bold></td></tr>
<tr>
<td align="right" valign="top">10:</td>
<td align="left" valign="top"><italic>leftindex</italic> ← the index for <italic>L<sub>H</sub></italic>(<italic>max</italic>(@<italic>tp<sub>l</sub></italic>) – <italic>π</italic>, <italic>max</italic>(@<italic>tp<sub>l</sub></italic>)) in the target stream buffer</td></tr>
<tr>
<td align="right" valign="top">11:</td>
<td align="left" valign="top"><italic>rightindex</italic> ← the index for <italic>L<sub>L</sub></italic>(<italic>max</italic>(@<italic>tp<sub>r</sub></italic>) – <italic>ρ</italic>, <italic>max</italic>(@<italic>tp<sub>r</sub></italic>)) in the target stream buffer</td></tr>
<tr>
<td align="right" valign="top">12:</td>
<td align="left" valign="top">Initialize look-up table (<italic>leftindex</italic>, <italic>rightindex</italic>)</td></tr>
<tr>
<td align="right" valign="top">13:</td>
<td align="left" valign="top"><bold>for</bold> <italic>e<sub>new</sub></italic> = <italic>tp<sub>r</sub></italic> downto <italic>tp<sub>l</sub></italic> in the base stream buffer <bold>do</bold></td></tr>
<tr>
<td align="right" valign="top">14:</td>
<td align="left" valign="top">  Compute <italic>L<sub>H</sub></italic>, <italic>L<sub>L</sub></italic>, based on <italic>e<sub>new</sub></italic></td></tr>
<tr>
<td align="right" valign="top">15:</td>
<td align="left" valign="top">  <bold>for all</bold> tuple <italic>e</italic> belongs to [<italic>L<sub>H</sub></italic>, <italic>L<sub>L</sub></italic>) in the target buffer <bold>do</bold></td></tr>
<tr>
<td align="right" valign="top">16:</td>
<td align="left" valign="top">    EfficientProbe(<italic>e<sub>new</sub></italic>, <italic>e</italic>, <italic>d</italic>, <italic>ct</italic>, <italic>BaseStream</italic>)</td></tr>
<tr>
<td align="right" valign="top">17:</td>
<td align="left" valign="top">  <bold>end for</bold></td></tr>
<tr>
<td align="right" valign="top">18:</td>
<td align="left" valign="top"><bold>end for</bold></td></tr>
<tr>
<td align="right" valign="top">19:</td>
<td align="left" valign="top">Initialize look-up table (<italic>leftindex</italic>, <italic>rightindex</italic>)</td></tr>
<tr>
<td align="right" valign="top">20:</td>
<td align="left" valign="top"><bold>for</bold> <italic>e<sub>new</sub></italic> = <italic>tp<sub>l</sub></italic> to <italic>tp<sub>r</sub></italic> in the base stream <bold>do</bold></td></tr>
<tr>
<td align="right" valign="top">21:</td>
<td align="left" valign="top">  Compute <italic>R<sub>L</sub></italic>, <italic>R<sub>H</sub></italic>, based on <italic>e<sub>new</sub></italic></td></tr>
<tr>
<td align="right" valign="top">22:</td>
<td align="left" valign="top">  <bold>for all</bold> tuple <italic>e</italic> belongs to (<italic>R<sub>L</sub></italic>, <italic>R<sub>H</sub></italic>] in the target buffer <bold>do</bold></td></tr>
<tr>
<td align="right" valign="top">23:</td>
<td align="left" valign="top">    EfficientProbe(<italic>e<sub>new</sub></italic>, <italic>e</italic>, <italic>d</italic>, <italic>ct</italic>, <italic>BaseStream</italic>)</td></tr>
<tr>
<td align="right" valign="top">24:</td>
<td align="left" valign="top">  <bold>end for</bold></td></tr>
<tr>
<td align="right" valign="top">25:</td>
<td align="left" valign="top"><bold>end for</bold></td></tr>
<tr>
<td align="right" valign="top">26:</td>
<td align="left" valign="top">Invalidate obsolete tuples in the base buffer by <italic>L<sub>H</sub></italic> (<italic>e<sub>inv</sub></italic>).</td></tr>
<tr>
<td align="right" valign="top">27:</td>
<td align="left" valign="top">Invalidate obsolete tuples in the target buffer by <italic>L<sub>H</sub></italic> (<italic>e<sub>inv</sub></italic>).</td></tr></tbody></table></table-wrap>
<p>The algorithm traverses the base tuples in the unprocessed block in reverse chronological order. Once we computed prob(|@<italic>e<sub>b</sub></italic> – @<italic>e<sub>t</sub></italic>| ≤ <italic>d</italic>) where <italic>e<sub>b</sub></italic> is a tuple in the base stream and <italic>e<sub>t</sub></italic> is a tuple in the target stream, we store the timestamp of <italic>e<sub>b</sub></italic> as well as the computed satisfaction probability into the look-up table. When we compute prob(|@<italic>e</italic>′<italic><sub>b</sub></italic> – @<italic>e<sub>t</sub></italic>| ≤ <italic>d</italic>) where <italic>e</italic>′<italic><sub>b</sub></italic> is another tuple in the base stream, we first check whether <italic>e</italic>′<italic><sub>b</sub></italic> can use the result computed based on <italic>e<sub>b</sub></italic>. This decision is made by comparing the min values of @<italic>e<sub>b</sub></italic> and @<italic>e′</italic><italic><sub>b</sub></italic>. If <italic>min</italic>(@<italic>e</italic>′<italic><sub>b</sub></italic>) ≤ <italic>min</italic>(@<italic>e<sub>b</sub></italic>), then it means that @<italic>e</italic>′<italic><sub>b</sub></italic> is strictly less than @<italic>e<sub>b</sub></italic>. (We define <italic>e</italic>′<italic><sub>b</sub></italic> is strictly less than <italic>e<sub>b</sub></italic> iff <italic>min</italic>(@<italic>e</italic>′<italic><sub>b</sub></italic>) ≤ <italic>min</italic>(@<italic>e<sub>b</sub></italic>) and <italic>max</italic>(@<italic>t</italic>′<italic><sub>b</sub></italic>) ≤ <italic>max</italic>(@<italic>t<sub>b</sub></italic>).) The algorithm traverses the base stream buffer from the tail; hence, it is trivially true that <italic>max</italic>(@<italic>e</italic>′<italic><sub>b</sub></italic>) ≤ <italic>max</italic>(@<italic>e<sub>b</sub></italic>). In case the @<italic>e</italic>′<italic><sub>b</sub></italic> is strictly less than <italic>e<sub>b</sub></italic>, we can reuse this result; if the stored value is larger than <italic>ct</italic> (the confidence threshold for this timing condition), then it should be the case prob(|@<italic>e</italic>′<italic><sub>b</sub></italic> – @<italic>e<sub>t</sub></italic>| ≤ <italic>d</italic>) is no less than <italic>ct</italic>. Hence, the tuple pair (<italic>e</italic>′<italic><sub>b</sub>, e<sub>t</sub></italic>) must be in the final result. Even if the stored value is less than <italic>ct</italic>, it is still possible that (<italic>e</italic>′<italic><sub>b</sub></italic>, <italic>e<sub>t</sub></italic>) can satisfy the interval timing condition. So, we compute the satisfaction probability for (<italic>e</italic>′<italic><sub>b</sub></italic>, <italic>e<sub>t</sub></italic>) and store the new result into the look-up table. If <italic>e</italic>′<italic><sub>b</sub></italic> is not strictly less than <italic>e<sub>b</sub></italic>, then we cannot reuse the stored result; we compute the satisfaction probability and store it.</p>
<p>Recall that the primary purpose of using the look-up table is to avoid the “relatively” expensive operation—the satisfaction probability calculation incurring floating-point operations. To minimize the overhead for accessing to the look-up tables, we used array data structure to implement the look-up table. Hence every access to the look-up table was done via the index to an element in the array.</p>
<table-wrap id="t7-sensors-10-05329" position="anchor">
<label>Algorithm 7</label>
<caption>
<p>EfficientProbe(<italic>e<sub>new</sub></italic>, <italic>e</italic>, <italic>d</italic>, <italic>ct</italic>, <italic>BaseStream</italic>)</p></caption>
<table frame="hsides" rules="groups">
<tbody>
<tr>
<td align="right" valign="top">1:</td>
<td align="left" valign="top"><bold>if</bold> the result in the look-up table is usable <bold>then</bold></td></tr>
<tr>
<td align="right" valign="top">2:</td>
<td align="left" valign="top">  <italic>c</italic> ← lookup(<italic>e</italic>)</td></tr>
<tr>
<td align="right" valign="top">3:</td>
<td align="left" valign="top">  <bold>if</bold> <italic>c</italic> = <italic>notInit</italic> <bold>then</bold></td></tr>
<tr>
<td align="right" valign="top">4:</td>
<td align="left" valign="top">    Probe(<italic>e<sub>new</sub></italic>, <italic>e</italic>, <italic>d</italic>, <italic>ct</italic>)</td></tr>
<tr>
<td align="right" valign="top">5:</td>
<td align="left" valign="top">    SetLookup(prob(|@<italic>e<sub>new</sub></italic> – @<italic>e</italic>| ≤ <italic>d</italic>), <italic>e</italic>)</td></tr>
<tr>
<td align="right" valign="top">6:</td>
<td align="left" valign="top">  <bold>else</bold></td></tr>
<tr>
<td align="right" valign="top">7:</td>
<td align="left" valign="top">    <bold>if</bold> <italic>c</italic> ≥ <italic>ct</italic> <bold>then</bold></td></tr>
<tr>
<td align="right" valign="top">8:</td>
<td align="left" valign="top">      Add (<italic>e<sub>new</sub></italic>, <italic>e</italic>) to the result</td></tr>
<tr>
<td align="right" valign="top">9:</td>
<td align="left" valign="top">    <bold>else</bold></td></tr>
<tr>
<td align="right" valign="top">10:</td>
<td align="left" valign="top">      Probe(<italic>e<sub>new</sub></italic>, <italic>e</italic>, <italic>d</italic>, <italic>ct</italic>)</td></tr>
<tr>
<td align="right" valign="top">11:</td>
<td align="left" valign="top">    <bold>end if</bold></td></tr>
<tr>
<td align="right" valign="top">12:</td>
<td align="left" valign="top">  <bold>end if</bold></td></tr>
<tr>
<td align="right" valign="top">13:</td>
<td align="left" valign="top"><bold>else</bold></td></tr>
<tr>
<td align="right" valign="top">14:</td>
<td align="left" valign="top">  Probe(<italic>e<sub>new</sub></italic>, <italic>e</italic>, <italic>d</italic>, <italic>ct</italic>)</td></tr>
<tr>
<td align="right" valign="top">15:</td>
<td align="left" valign="top">  SetLookup(prob(|@<italic>e<sub>new</sub></italic> – @<italic>e</italic>| ≤ <italic>d</italic>), <italic>e</italic>)</td></tr>
<tr>
<td align="right" valign="top">16:</td>
<td align="left" valign="top"><bold>end if</bold></td></tr></tbody></table></table-wrap>
<p>Now let us prove the correctness of the look-up technique in the algorithm.</p>
<p><bold>Corollary 3</bold> <italic>Suppose there are two timestamps I</italic><sub>1</sub> <italic>and I</italic><sub>2</sub>. <italic>Assume that min</italic>(<italic>I</italic><sub>1</sub>) ≤ <italic>min</italic>(<italic>I</italic><sub>2</sub>) <italic>and max</italic>(<italic>I</italic><sub>1</sub>) ≥ <italic>max</italic>(<italic>I</italic><sub>2</sub>), <italic>i.e., I</italic><sub>1</sub> <italic>covers entire I</italic><sub>2</sub>. <italic>Then prob</italic>(|<italic>I</italic><sub>1</sub> − <italic>I</italic><sub>2</sub>| ≤ <italic>d</italic>) = 1.</p>
<p>Proof:</p>
<p>Since <italic>d</italic> ≥ <italic>π</italic>, <italic>min</italic>(<italic>I</italic><sub>1</sub>) + <italic>d</italic> ≥ <italic>max</italic>(<italic>I</italic><sub>1</sub>). By the assumption, <italic>max</italic>(<italic>I</italic><sub>1</sub>) ≥ <italic>max</italic>(<italic>I</italic><sub>2</sub>). Therefore, <italic>min</italic>(<italic>I</italic><sub>1</sub>) + <italic>d</italic> ≥ <italic>max</italic>(<italic>I</italic><sub>2</sub>); hence <italic>prob</italic>(<italic>I</italic><sub>1</sub> + <italic>d</italic> ≥ <italic>I</italic><sub>2</sub>) = 1. By the assumption, <italic>min</italic>(<italic>I</italic><sub>2</sub>) ≥ <italic>min</italic>(<italic>I</italic><sub>1</sub>). Hence, <italic>min</italic>(<italic>I</italic><sub>2</sub>) + <italic>d</italic> ≥ <italic>min</italic>(<italic>I</italic><sub>1</sub>) + <italic>d</italic> ≥ <italic>max</italic>(<italic>I</italic><sub>1</sub>). Therefore, <italic>prob</italic>(<italic>I</italic><sub>2</sub> + <italic>d</italic> ≥ <italic>I</italic><sub>1</sub>) = 1. Therefore, <italic>prob</italic>(|<italic>I</italic><sub>1</sub> – <italic>I</italic><sub>2</sub>| ≤ <italic>d</italic>) = 1.</p>
<p><bold>Theorem 2</bold> <xref ref-type="table" rid="t6-sensors-10-05329"><italic>Algorithm 6</italic></xref>, <italic>the lazy timing correlation with a look-up table, is correct.</italic></p>
<p>Proof:</p>
<p>Let us first prove that the code block handling the left probe region is correct. The main idea of the look-up technique is that we can reuse the result of the timing condition (|@<italic>e</italic> – @<italic>e<sub>lookup</sub></italic>| ≤ <italic>d</italic>, <italic>ct</italic>) in determining (|@<italic>e</italic> – @<italic>e<sub>new</sub></italic>| ≤ <italic>d</italic>, <italic>ct</italic>). <italic>e<sub>new</sub></italic> is the base tuple currently examined in the code and <italic>e<sub>lookup</sub></italic> is the base tuple which was used for calculating <italic>prob</italic>(|@<italic>e</italic> – @<italic>e<sub>lookup</sub></italic>| ≤ <italic>d</italic>) and stored in the look-up table where <italic>e</italic> is a tuple in the target stream buffer. The first line of the EfficientProbe function checks whether the tuple <italic>e<sub>new</sub></italic> in the source stream buffer satisfies the condition <italic>min</italic>(@<italic>e<sub>new</sub></italic>) ≤ <italic>min</italic>(@<italic>e<sub>lookup</sub></italic>).</p>
<p>First, let us prove that it is always the case that <italic>max</italic>(@<italic>e</italic>) ≤ <italic>max</italic>(@<italic>e<sub>new</sub></italic>) ≤ <italic>max</italic>(@<italic>e<sub>lookup</sub></italic>). <italic>L<sub>L</sub></italic>(<italic>max</italic>(@<italic>e<sub>new</sub></italic>)) ≤ <italic>max</italic>(@<italic>e<sub>new</sub></italic>) always holds. <italic>e</italic> is going to be used in processing <italic>e<sub>new</sub></italic> only when @<italic>e</italic> belongs to [<italic>L<sub>H</sub></italic>(@<italic>e<sub>new</sub></italic>), <italic>L<sub>L</sub></italic>(@<italic>e<sub>new</sub></italic>)), i.e., <italic>L<sub>H</sub></italic>(@<italic>e<sub>new</sub></italic>) ≤ <italic>max</italic>(@<italic>e</italic>) &lt; <italic>L<sub>L</sub></italic>(@<italic>e<sub>new</sub></italic>). Since the algorithm traverses the source stream buffer from the end of the unprocessed tuples, it should be always the case that <italic>max</italic>(@<italic>e<sub>new</sub></italic>) ≤ <italic>max</italic>(@<italic>e<sub>lookup</sub></italic>); hence <italic>max</italic>(@<italic>e</italic>) ≤ <italic>max</italic>(@<italic>e<sub>new</sub></italic>) ≤ <italic>max</italic>(@<italic>e<sub>lookup</sub></italic>). There can be two cases as shown in the following:</p>
<p>Case <italic>min</italic>(@<italic>e</italic>) ≤ <italic>min</italic>(@<italic>e<sub>new</sub></italic>): In this case it is evident that <italic>prob</italic>(|@<italic>e</italic> – @<italic>e<sub>new</sub></italic>| ≤ <italic>d</italic>) = <italic>prob</italic>(@<italic>e</italic> + <italic>d</italic> ≥ @<italic>e<sub>new</sub></italic>) by Corollary 1. Similarly, <italic>prob</italic>(|@<italic>e</italic> – @<italic>e<sub>lookup</sub></italic>| ≤ <italic>d</italic>) = <italic>prob</italic>(@<italic>e</italic> + <italic>d</italic> ≥ @<italic>e<sub>lookup</sub></italic>). By Corollary 2 if (@<italic>e</italic> + <italic>d</italic> ≥ @<italic>e<sub>lookup</sub></italic>, <italic>ct</italic>) is satisfied then so is (@<italic>e</italic> + <italic>d</italic> ≥ @<italic>e<sub>new</sub></italic>, <italic>ct</italic>).</p>
<p>Case <italic>min</italic>(@<italic>e</italic>) &gt; <italic>min</italic>(@<italic>e<sub>new</sub></italic>): In this case @<italic>e<sub>new</sub></italic> covers entire @<italic>e</italic>. Hence, <italic>prob</italic>(|@<italic>e</italic> – @<italic>e<sub>new</sub></italic>| ≤ <italic>d</italic>) = 1 ≥ <italic>prob</italic>(|@<italic>e</italic> – @<italic>e<sub>lookup</sub></italic>| ≤ <italic>d</italic>) by Corollary 3.</p>
<p>In both cases, it was shown that if (@<italic>e</italic> + <italic>d</italic> ≥ @<italic>e<sub>lookup,</sub></italic> <italic>ct</italic>) is satisfied then so is (@<italic>e</italic> + <italic>d</italic> ≥ @<italic>e<sub>new,</sub></italic> <italic>ct</italic>). The proof for the codes handling the right probe region is similar to this, hence is omitted.</p></sec></sec>
<sec sec-type="methods">
<label>5.</label>
<title>Experiment and Analysis</title>
<p>In this section, we present experiment results showing various aspects of the proposed algorithms presented in the previous section. The data show that the lazy-family algorithms (lazy and lazy with look-up tables) give higher throughput than the eager algorithm; however they suffer from slower response time than the eager algorithm. We implemented a simple stream simulation system. Stream providers in the simulation system read the predefined event tuples and transmit them to the correlation algorithms. The implementation was done in Java. An Intel Xeon 1.8Mhz system with 1GB main memory on Windows XP professional was used for the experiment.</p>
<sec sec-type="results">
<label>5.1.</label>
<title>Experiment Results</title>
<p>We prepared the data files r12.dat, r24.dat, ..., and r1600.dat providing data streams of which arrival rates are from 12 tuples/second to 1,600 tuples/second respectively. We measured the execution times and the average response times of the correlation algorithms under these workloads. The execution time of an algorithm is measured by the total time spent by the algorithm. The response time is the summation of the response times for all tuples processed by the algorithm. The response time of a tuple (<italic>e</italic><sub>1</sub>, <italic>e</italic><sub>2</sub>) is computed by the correlation completion time minus MAX(max(@<italic>e</italic><sub>1</sub>), max(@<italic>e</italic><sub>2</sub>)). The results are shown in <xref ref-type="fig" rid="f3-sensors-10-05329">Figures 3</xref> and <xref ref-type="fig" rid="f4-sensors-10-05329">4</xref>. The growth of the execution times of the eager correlation and the lazy correlation family (lazy algorithm and lazy correlation with look-up tables) is much slower than those of the simple correlation family (simple correlation and simple sort correlation). The primary performance gain is achieved from the bounds analysis of satisfaction probability; the former algorithms save time by skipping the computation of the satisfaction probabilities for the tuples belonging to the satisfaction and violation regions. The simple sort correlation is faster than the simple correlation. This is mainly because the invalidation process is much effective in the simple sort correlation. By doing the correlation in bulk, the lazy correlation family shows better performance over the eager correlation.</p>
<p>It is also observed that the average response time of the eager correlation is better than that of the lazy correlation family. In addition, if the stream arrival rate is not so fast (until 400 tuples/second in this particular setting), the simple sort correlation and the simple correlation are better than the lazy correlation family as far as the average response time is concerned. The lazy correlation family intentionally delays the processing of incoming tuples; even in the case where the tuples can be processed right away; the tuples are waiting in the stream buffer until there are “enough” number of tuples. In contrast, the other algorithms process the incoming tuples as soon as they arrive. When the processing speed cannot catch up with the stream arrival speed, the response time begins to increase sharply.</p>
<p>The performance gain in the lazy correlation and the lazy correlation with a look-up table comes at the expense of larger memory usage and longer response time. Let us show the stream buffer usage of each correlation algorithm.</p>
<p><xref ref-type="fig" rid="f5-sensors-10-05329">Figure 5</xref> shows the average lengths of stream buffers for the timing correlation algorithms. The length of the buffers for the eager correlation is the shortest. The buffer length for the simple sort correlation is shorter than that for the simple correlation. This is because the tuples are sorted in the simple sort correlation; hence, it is easier to find consecutive invalid tuples and remove them. In this experiment, we set the enough number of tuple of the lazy correlation to one thousand. Hence, roughly the length difference between the lazy correlation and the eager correlation is a thousand. Since the lazy correlation with a look-up table shares the same implementation of the lazy correlation except the probing part, the average buffer length is almost the same. Note that we also need to consider the size of the look-up table for analyzing the space requirement. The size of the look-up table can be as big as the stream buffers.</p>
<p>Now let us show the effectiveness of increasing the block size determining the “enough” number of tuples to run the lazy correlation algorithms. <xref ref-type="fig" rid="f6-sensors-10-05329">Figure 6</xref> represents the execution times under different correlation block sizes. In this experiment, we used the data file r500.dat (500 tuples/second) with the parameter <italic>d</italic> = 500. The experiments were done on two confidence threshold values 0.8 and 0.5. It can be observed that as we increase the correlation block size, the execution times tend to decrease, however, the differences are diminishing gradually.</p>
<p><xref ref-type="fig" rid="f7-sensors-10-05329">Figure 7</xref> represents the changes of the hit ratios of the look-up tables under different correlation block sizes. The hit ratio of the look-up table is computed by the number of tuples in the probe regions which did not need the probability computations divided by the total number of tuples in the probe regions. The look-up hit ratios were also gradually improved until they were stabilized at the correlation block size of 1,200 for this experiment. Note that the hit ratios largely depend on the property of the stream input, e.g., whether they are roughly sorted or not; thus, the hit ratios are not much changing in the figure. The maximum difference was observed at the transition from the correlation block size 200 to 400 on both cases.</p>
<p><xref ref-type="fig" rid="f8-sensors-10-05329">Figure 8</xref> shows the experiment results with the data file <italic>seq.dat</italic> where all tuples are ordered in their max timestamps. In this experiment, we set <italic>d</italic> = 1, 000 and <italic>ct</italic> = 1.0, 0.7, 0.4; and 0.1. It is shown that the lazy correlation with a look-up table performs the best in all cases. However the difference between the lazy correlation and the lazy correlation with a look-up table becomes smaller as we decrease the confidence threshold. This is primarily due to the small size of probe regions in low confidence threshold settings; thus the performance gain achieved by using the look-up table is not significant compared to the cases of the high confidence thresholds. We can explain this by the following analysis.</p>
<p>It turns out the higher confidence threshold requirement, the larger left probe region as shown in <xref ref-type="fig" rid="f9-sensors-10-05329">Figure 9</xref>. In contrast, the lower confidence threshold requirement, the larger right probe region. An important observation is that the size of the left probe region is likely to be larger than that of the right one. The maximum size of the left probe region is <italic>d</italic> − <italic>ρ</italic>, which must be larger than that of the right region <italic>π</italic>. This is because <italic>d</italic> is much larger than <italic>π</italic> in typical cases. In the extreme case where <italic>ct</italic> = 100%, the right probe region does not exist while the size of the left probe region is maximized. In this specific experiment setting, the maximum size of the left probe region is <italic>d</italic> − <italic>ρ</italic> = 1, 000 − 20, and the maximum size of the right probe region is <italic>π</italic> − <italic>ρ</italic> = 200 − 20.</p></sec></sec>
<sec sec-type="conclusions">
<label>6.</label>
<title>Summary</title>
<p>In this study, we proposed novel algorithms for the interval timing correlation. They can be used for extracting temporally related pairs of streaming sensor. In order to handle the uncertainty in timestamps, we adopted interval timestamps and included the confidence thresholds into timing conditions.</p>
<p>We extended a previously studied algorithm by adopting the approaches of the lazy evaluation and the result look-up. The lazy timing correlation also utilizes the upper-bounds and the lower-bounds. It postpones the evaluation until its re-evaluation condition is met and performs the correlation of the tuple blocks. In order to reduce the computation overhead of the satisfaction probability in probe regions, we added an idea of look-up technique. We measured the effectiveness of the proposed algorithms over the previous algorithms by comparing their performance under various workloads and presented the analysis. It turns out that the lazy family algorithms provide better performance with the sacrifice of extra memory for larger buffer and larger response time under slow streaming environment.</p>
<p>For the future work, the generalization of the proposed techniques for various probability distributions seems interesting. For the lazy approach, we need to derive upper-bounds and lower-bounds of the new probability distributions. The invalidation operations shown at the end of <xref ref-type="table" rid="t5-sensors-10-05329">Algorithm 5</xref> should be extended accordingly. For the look-up technique, we need an extension of the Corollary 2. Heterogeneous combinations of probability distributions may require non-trivial extensions. Similar changes are needed to the <xref ref-type="table" rid="t7-sensors-10-05329">Algorithm 7</xref>.</p>
<p>It would be also interesting to apply the proposed techniques to the practical and real situations. As the sensor network become wide spread, we are looking forward to testing our algorithms in real life scenarios.</p></sec></body>
<back>
<ack>
<p>This research was supported by the Chung-Ang University Research Scholarship Grants in 2009.</p></ack>
<ref-list>
<title>References</title>
<ref id="b1-sensors-10-05329"><label>1.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Dyreson</surname><given-names>C.E.</given-names></name><name><surname>Snodgrass</surname><given-names>R.T.</given-names></name></person-group><article-title>Supporting Valid-time Indeterminacy</article-title><source>ACM Trans. Database Syst</source><year>1998</year><volume>23</volume><fpage>1</fpage><lpage>57</lpage><pub-id pub-id-type="doi">10.1145/288086.288087</pub-id></citation></ref>
<ref id="b2-sensors-10-05329"><label>2.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Babcock</surname><given-names>B.</given-names></name><name><surname>Babu</surname><given-names>S.</given-names></name><name><surname>Datar</surname><given-names>M.</given-names></name><name><surname>Motwani</surname><given-names>R.</given-names></name><name><surname>Widom</surname><given-names>J.</given-names></name></person-group><article-title>Models and Issues in Data Stream Systems</article-title><conf-name>Proceedings of the ACM SIGACT-SIGMOD-SIGART Symposium on Principles of Database Systems</conf-name><conf-loc>Madison, WI, USA</conf-loc><conf-date>June 3–5, 2002</conf-date><fpage>1</fpage><lpage>16</lpage></citation></ref>
<ref id="b3-sensors-10-05329"><label>3.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Golab</surname><given-names>L.</given-names></name><name><surname>Ozsu</surname><given-names>M.T.</given-names></name></person-group><article-title>Issues in Data Stream Management</article-title><source>SIGMOD Rec</source><year>2003</year><volume>32</volume><fpage>5</fpage><lpage>14</lpage><pub-id pub-id-type="doi">10.1145/776985.776986</pub-id></citation></ref>
<ref id="b4-sensors-10-05329"><label>4.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Abadi</surname><given-names>D.J.</given-names></name><name><surname>Carney</surname><given-names>D.</given-names></name><name><surname>Cetintemel</surname><given-names>U.</given-names></name><name><surname>Cherniack</surname><given-names>M.</given-names></name><name><surname>Convey</surname><given-names>C.</given-names></name><name><surname>Lee</surname><given-names>S.</given-names></name><name><surname>Stonebraker</surname><given-names>M.</given-names></name><name><surname>Tatbul</surname><given-names>N.</given-names></name><name><surname>Zdonik</surname><given-names>S.B.</given-names></name></person-group><article-title>Aurora: A New Model and Architecture for Data Stream Management</article-title><source>VLDB J</source><year>2003</year><volume>12</volume><fpage>120</fpage><lpage>139</lpage><pub-id pub-id-type="doi">10.1007/s00778-003-0095-z</pub-id></citation></ref>
<ref id="b5-sensors-10-05329"><label>5.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Hammad</surname><given-names>M.A.</given-names></name><name><surname>Aref</surname><given-names>W.G.</given-names></name><name><surname>Elmagarmid</surname><given-names>A.K.</given-names></name></person-group><article-title>Stream Window Join: Tracking Moving Objects in Sensor-network Databases</article-title><conf-name>Proceedings of the 15th International Conference on Scientific and Statistical Database Management</conf-name><conf-loc>Cambridge, MA, USA</conf-loc><conf-date>July 9–11, 2003</conf-date><fpage>75</fpage><lpage>84</lpage></citation></ref>
<ref id="b6-sensors-10-05329"><label>6.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Kang</surname><given-names>J.</given-names></name><name><surname>Naughton</surname><given-names>J.F.</given-names></name><name><surname>Viglas</surname><given-names>S.</given-names></name></person-group><article-title>Evaluating Window Joins over Unbounded Streams</article-title><conf-name>Proceedings of the 19th International Conference on Data Engineering</conf-name><conf-loc>Bangalore, India</conf-loc><conf-date>March 5–8, 2003</conf-date><fpage>341</fpage><lpage>352</lpage></citation></ref>
<ref id="b7-sensors-10-05329"><label>7.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Srivastava</surname><given-names>U.</given-names></name><name><surname>Widom</surname><given-names>J.</given-names></name></person-group><article-title>Flexible Time Management in Data Stream Systems</article-title><conf-name>Proceedings of the ACM SIGACT-SIGMOD-SIGART Symposium on Principles of Database Systems</conf-name><conf-loc>Paris, France</conf-loc><conf-date>June 14–16, 2004</conf-date><fpage>263</fpage><lpage>274</lpage></citation></ref>
<ref id="b8-sensors-10-05329"><label>8.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Wu</surname><given-names>J.</given-names></name><name><surname>Tan</surname><given-names>K.L.</given-names></name><name><surname>Zhou</surname><given-names>Y.</given-names></name></person-group><article-title>Data-Driven Memory Management for Stream Join</article-title><source>Inform. Syst</source><year>2009</year><volume>34</volume><fpage>454</fpage><lpage>467</lpage><pub-id pub-id-type="doi">10.1016/j.is.2009.02.001</pub-id></citation></ref>
<ref id="b9-sensors-10-05329"><label>9.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Lee</surname><given-names>C.G.</given-names></name><name><surname>Mok</surname><given-names>A.K.</given-names></name><name><surname>Konana</surname><given-names>P.</given-names></name></person-group><article-title>Monitoring of Timing Constraints with Confidence Threhold Requirements</article-title><conf-name>Proceedings of IEEE Real-Time Systems Symposium(RTSS)</conf-name><conf-loc>Cancun, Mexico</conf-loc><conf-date>December 3–5, 2003</conf-date><fpage>178</fpage><lpage>187</lpage></citation></ref>
<ref id="b10-sensors-10-05329"><label>10.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Lee</surname><given-names>C.G.</given-names></name><name><surname>Mok</surname><given-names>A.K.</given-names></name><name><surname>Konana</surname><given-names>P.</given-names></name></person-group><article-title>Monitoring of Timing Constraints with Confidence Threshold Requirements</article-title><source>IEEE Trans. Comput</source><year>2007</year><volume>56</volume><fpage>977</fpage><lpage>991</lpage><pub-id pub-id-type="doi">10.1109/TC.2007.1026</pub-id></citation></ref>
<ref id="b11-sensors-10-05329"><label>11.</label><citation citation-type="journal"><person-group person-group-type="author"><name><surname>Lee</surname><given-names>C.G.</given-names></name><name><surname>Mok</surname><given-names>A.K.</given-names></name><name><surname>Konana</surname><given-names>P.</given-names></name></person-group><article-title>Online Timing Correlation of Streaming Data with Uncertain Timestamps</article-title><source>IEICE Trans. Inform. Systems</source><year>2009</year><volume>E92-D</volume><fpage>1260</fpage><lpage>1267</lpage><pub-id pub-id-type="doi">10.1587/transinf.E92.D.1260</pub-id></citation></ref>
<ref id="b12-sensors-10-05329"><label>12.</label><citation citation-type="confproc"><person-group person-group-type="author"><name><surname>Golab</surname><given-names>L.</given-names></name><name><surname>Ozsu</surname><given-names>M.T.</given-names></name></person-group><article-title>Processing Sliding Window Multi-Joins in Continuous Queries over Data Streams</article-title><conf-name>Proceedings of the International Conference on Very Large Data Bases(VLDB)</conf-name><conf-loc>Berlin, Germany</conf-loc><conf-date>September 9–12, 2003</conf-date><fpage>500</fpage><lpage>511</lpage></citation></ref></ref-list>
<sec sec-type="display-objects">
<title>Figures</title>
<fig id="f1-sensors-10-05329" position="float">
<label>Figure 1.</label>
<caption>
<p>(a) The upper-bounds and the lower-bounds of satisfaction probabilities (b) Efficient filtering process using the bounds.</p></caption>
<graphic xlink:href="sensors-10-05329f1.gif"/></fig>
<fig id="f2-sensors-10-05329" position="float">
<label>Figure 2.</label>
<caption>
<p>Efficient probing example.</p></caption>
<graphic xlink:href="sensors-10-05329f2.gif"/></fig>
<fig id="f3-sensors-10-05329" position="float">
<label>Figure 3.</label>
<caption>
<p>The execution times under various arrival rates.</p></caption>
<graphic xlink:href="sensors-10-05329f3.gif"/></fig>
<fig id="f4-sensors-10-05329" position="float">
<label>Figure 4.</label>
<caption>
<p>The average response times under various arrival rates.</p></caption>
<graphic xlink:href="sensors-10-05329f4.gif"/></fig>
<fig id="f5-sensors-10-05329" position="float">
<label>Figure 5.</label>
<caption>
<p>Average lengths of stream buffers.</p></caption>
<graphic xlink:href="sensors-10-05329f5.gif"/></fig>
<fig id="f6-sensors-10-05329" position="float">
<label>Figure 6.</label>
<caption>
<p>The execution times under different correlation block sizes.</p></caption>
<graphic xlink:href="sensors-10-05329f6.gif"/></fig>
<fig id="f7-sensors-10-05329" position="float">
<label>Figure 7.</label>
<caption>
<p>The hit ratio of the look-up table under different correlation block sizes.</p></caption>
<graphic xlink:href="sensors-10-05329f7.gif"/></fig>
<fig id="f8-sensors-10-05329" position="float">
<label>Figure 8.</label>
<caption>
<p>The execution times under various confidence thresholds.</p></caption>
<graphic xlink:href="sensors-10-05329f8.gif"/></fig>
<fig id="f9-sensors-10-05329" position="float">
<label>Figure 9.</label>
<caption>
<p>The interval timing correlation with high and low confidence thresholds.</p></caption>
<graphic xlink:href="sensors-10-05329f9.gif"/></fig></sec></back></article>
