<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Exploiting Order Dependencies on Primary Keys for Optimization</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Michał Chromiak?</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Piotr Wiśniewski?</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Krzysztof Stencel ??</string-name>
          <email>stencel@mimuw.edu.pl</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Institute of Informatics Maria Curie Skłodowska University Lublin</institution>
          ,
          <country country="PL">Poland</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Functional dependencies have been used in query optimisation for decades. Moreover, if two domains have a natural ordering of their elements, a functional dependency of them can potentially preserve these orderings, i.e. be a monotonic function. This monotonicity can be exploited by query optimizers. Recently, such monotonic functional dependencies have been termed order dependencies. In this paper we propose a query rewriting method based on order dependencies on primary keys. If an attribute used in the WHERE clause has an order dependency on the primary key, such a selection can be replaced by the corresponding condition on the primary key. We have implemented this optimisation method in the integration framework called the cuboid. It automates the integration of disparate databases according to the CQS model. Cuboids facilitate injecting dependencies and utilizing them in query optimization.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Optimisation methods that exploit functional dependencies have already been
know for decades. Most of these methods base on the injectivity of the
dependency function or its lack. Other properties of this functions are disused.
However, if the domain of such a function is ordered and the function itself can
preserve this order (i.e. be monotonic). This possibility have been discovered by
Jarek Gryz [
        <xref ref-type="bibr" rid="ref1 ref2 ref3 ref4">1–4</xref>
        ]. He noted that date columns usually monotonic functions of
artificial primary keys. The article [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] proposes a simple method based on this
observation. The resulting speedup of query execution ranged from 20% to 50%.
Following papers [
        <xref ref-type="bibr" rid="ref2 ref3 ref4">2–4</xref>
        ] abstract so-called order dependencies and present their
proof theory similar to Armstrong’s axioms.
      </p>
      <p>
        Optimisation methods invented by Jarek Gryz and his team are implemented
inside IBM DB2 in one of its experimental branches. It allows hoping that soon
these methods will be available to the user community. However, users of other
DBMSs cannot access them. Therefore, in this paper we struggle to implement
similar optimisation mechanisms outside of a specific database system. Our
experience [
        <xref ref-type="bibr" rid="ref5 ref6 ref7 ref8 ref9">5–9</xref>
        ] proves that a middleware is a perfect place to do this. It allows
e.g. avoiding a dependency of a particular database vendor. In this paper, we
use a cuboid as such a middleware. [
        <xref ref-type="bibr" rid="ref10 ref11">10, 11</xref>
        ]
      </p>
      <p>The paper is organized as follows. Section section 2 presents a motivating
example that shows optimisation potential values vested in order dependencies.
Section section 3 describes the proposed query rewriting algorithm and justifies
its semantic correctness. Section section 4 reminds the properties of the cuboid
and portrays its potential usage to inject optimisations routines. Section section 5
shows experimental evaluation of the proposed optimisation method. Section
section 6 concludes.</p>
    </sec>
    <sec id="sec-2">
      <title>Acknowledgment</title>
      <p>We would like to thank Jarek Gryz for his inspiring keynote talk on Order
Dependencies at the conference BDAS 2014 in Ustroń.</p>
    </sec>
    <sec id="sec-3">
      <title>Contribution</title>
      <p>The contribution of this paper consists of (1) a query rewriting algorithm that
employs order dependencies and (2) an idea to use the cuboid as a layer to inject
optimisation algorithms and (3) its positive verification.
Assume a simple data warehouse of the schema presented on Figure fig. 1.
Consider the query for the sales in a selected period show on Listing 1.1. If the
column date has no index, this query will require a full scan of the fact table.</p>
      <p>Listing 1.1. A query for sales in the indicated period
SELECT cname , sum( a g g r v ) , SUM( a g g r q )</p>
      <p>FROM f a c t s JOIN c u s t o m e r s USING ( c i d )
WHERE date between ’ 2008 12 13 ’ AND ’ 2008 12 15 ’
GROUP BY c i d , cname</p>
      <p>The column f id of the table facts is its primary key. Therefore, all other
columns of this tables are functionally dependent on it. The column date is this
a function d : INT 7! DATES . The implementation of such an artificial key is
usually based on a sequence generator. Moreover, it is easy to assure that facts
on sales from a particular day are recorded after all sales from the previous day.
Therefore, we can assume that that d : INT 7! DATES is non-decreasing. If we
assume that:
xmin = minfx; d(x) = ’2008-12-13’g
xmax = max fx; d(x) = ’2008-12-15’g
the query from Listing listing 1.1 is equivalent to the query shown on Listing
listing 1.2. We have rewritten the condition of the WHERE clause.</p>
      <p>Listing 1.2. A rewritten query for sales in the indicated period
SELECT cname , sum( a g g r v ) , SUM( a g g r q )</p>
      <p>FROM f a c t s JOIN c u s t o m e r s USING ( c i d )</p>
    </sec>
    <sec id="sec-4">
      <title>WHERE f i d between xmin AND xmax</title>
      <p>GROUP BY c i d , cname</p>
      <p>The query of Listing 1.2 will be executed using the range index on the primary
key provided it is enough selective. Thus, its running time will be significantly
shorter than that of the query from Listing listing 1.1. Moreover, the
monotonicity of the function d allows efficient computing of xmin and xmax using the binary
search. The experiments we have conducted prove that the overhead caused by
this binary search is notably smaller that the time saved by executing the
optimized version of the example query. This observations have led us to a rewrite
algorithms that implements the idea presented above.
3
3.1</p>
      <sec id="sec-4-1">
        <title>Query rewriting algorithm</title>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Order Dependencies</title>
      <p>Assume a table T with its primary key P and remaining attributes fA1; : : : ; Ang.
Since P is the primary key of T there exists functions f1; : : : ; fn such that each
tuple (p; a1; :::; an) of the table T cane be expressed as (p; f1(p); : : : ; fn(p)). The
existence of the functions f1; : : : ; fn validate the functional dependencies of the
column A1; : : : ; An on the primary key P .</p>
      <p>Assume that the domains of the columns P and Ai for a given i 2 f1; 2; : : : ; ng
are linearly ordered sets. The functional dependency between P and Ai will
be called an order Dependencies, if the function fi is monotonic. Moreover, an
important property of fi is whether is increasing, non-decreasing, non-increasing
or decreasing.</p>
      <p>
        Such dependencies are initially called monotonic dependencies [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]. Then,
their inventors coin the name order dependencies. The motivating example from
Section 2 is based on such a dependency between the primary key f id and the
column date.
3.2
      </p>
    </sec>
    <sec id="sec-6">
      <title>Query rewriting</title>
      <p>The goal of the algorithm is to replace range conditions on non-indexed columns
to corresponding range search on usually indexed primary key. The algorithm is
aware of the schema, functional and order dependencies. Its version presented is
this paper is able to rewrite SPJ queries (select-project-joins) and
grouping-andaggregate queries. The input of the algorithm is a query of the form portrayed
on Listing1.3:</p>
      <p>Listing 1.3. Initial form of the query to be possibly rewritten
SELECT . . .</p>
      <p>FROM T JOIN T1 ON (T . f 1 k = T1 . pk )</p>
      <p>JOIN T2 ON (T . f 2 k = T2 . pk )
. . . .</p>
    </sec>
    <sec id="sec-7">
      <title>WHERE T . Ai BETWEEN a1 AND a2 GROUP BY . . . . . .</title>
      <p>We also allow WHERE clauses with equality and inequality. We than convert
them to atomic formulae based on BETWEEN using the same value or the data
type margin (“infinity”) values. The condition WHERE T.Ai = a is the converted
to WHERE T.Ai a BETWEEN a.</p>
      <p>In the first step we identify the fact table. We analyze the conditions in the
JOIN ... ON clauses. The fact table connects other tables by foreign keys while
its primary key is not connected by any other foreign key. In a query of the form
shown on Listing 1.3 the fact table is denoted by T . If a query contains a string
of dependencies foreign-primary key (e.g. in a snowflake schema), the algorithm
will also do. However, if it encounters a cycle, it will stop processing and return
the original query.</p>
      <p>The second step of the algorithm consists in checking whether (1) the WHERE
clause references a column of the identified fact table and (2) this column has
an order dependency of the primary key.</p>
      <p>In the third step, if the function fi is non-decreasing, we will search for values
pmin and pmax such that:
pmin = minfp; fi(p) = a1g;
pmax = max fp; fi(p) = a2g
(1)</p>
      <p>Analogously, if this function in non-increasing, the algorithm will compute
values pmin and pmax such that:
pmin = minfp; fi(p) = a2g;
pmax = max fp; fi(p) = a1g
(2)
Eventually, the algorithm concludes replacing the WHERE with:</p>
      <p>WHERE T.P BETWEEN pmin AND pmax</p>
      <p>Since the function fi is monotonic, the computation of pmin and pmax can
be computed efficiently, e.g. using the binary search.
3.3</p>
    </sec>
    <sec id="sec-8">
      <title>Remarks on the Implementation</title>
      <p>The algorithm is implemented in a middleware, i.e. outside of the database
system. The computation of pmin and pmax that satisfy conditions (1) and (2)
can be done in at least two ways. Both are based on the binary search.</p>
      <p>Firstly, we can send a series of queries in the course of the binary search.
Its advantage is its inherent simplicity and the lack of any additional database
object required. However, it causes numerous communication round trips with
the database systems.</p>
      <p>Secondly, we can install appropriate stored procedures on the database side.
We have decided to implement the binary search exactly this way. When the
optimizer on the middleware side is informed on the order dependency between the
primary key and the column date, it will generate and install two stored
functions. One of them shown on Listing 1.4 finds minimal f id for a given date. An
analogous function get max fid by date(DATE) that computes maximal f id is
also needed.</p>
      <p>Listing 1.4. A function that finds the minimal f id for a given date
CREATE OR REPLACE FUNCTION g e t m i n f i n d b y d a t e (</p>
    </sec>
    <sec id="sec-9">
      <title>DF DATE</title>
      <p>) RETURNS integer AS $$
DECLARE</p>
    </sec>
    <sec id="sec-10">
      <title>F INTEGER;</title>
    </sec>
    <sec id="sec-11">
      <title>Z INTEGER;</title>
    </sec>
    <sec id="sec-12">
      <title>S INTEGER;</title>
    </sec>
    <sec id="sec-13">
      <title>D DATE;</title>
      <p>BEGIN</p>
    </sec>
    <sec id="sec-14">
      <title>SELECT MAX ( f i d ) INTO Z FROM f a c t s ;</title>
      <p>S=1;
WHILE S&lt;Z LOOP</p>
      <p>S=S 2 ;</p>
      <p>END LOOP;
F=S ;
WHILE S&gt;1 LOOP</p>
      <p>S=S / 2 ;
SELECT date into D from f a c t s where f i d = F
IF D&gt;= DF THEN</p>
      <p>F=F S ;
END IF ;</p>
      <p>END LOOP;</p>
      <p>RETURN F ;
END;
$$ LANGUAGE p l p g s q l</p>
      <p>For the sake of readability we removed error handling code from the function
get min... These errors may be caused by gaps in the numbering stored in the
column f id.</p>
      <p>Using this function (and its twin get max...) the optimizer will first issue
queries for corresponding margin values of f id. Then, it will put the collected
parameters as values of bind variables in the modified query.
4</p>
      <sec id="sec-14-1">
        <title>Cuboid as the linkup data structure</title>
        <p>Cuboid is a form of central, master metadata repository. It is responsible for
storing contributory meta information about constituent data sources. Each
integrated data source must first be a subject of a registration procedure (see
fig. 2). To register a data source at the Cuboid each data source needs a
dedicated mediator to extract from the data source its most informative metadata
about schemas, entities and their detailed description. Among those metadata
mediator also places adequate queries. Those queries are native queries
considering particular data source. Each query is responsible for storing information
about particular part of the schema. The decision about which part of the data
is going to be covered with the queries’ result sets is for the first time made at
mediator configuration, prior to its registration in Cuboid. Thus, during
mediator initialization (ie. metadata collecting from data source) mediator is aware
of the data sets that needs to be covered with queries. The metadata collected
from data source can further be modified during the mediator to Cuboid chatter.
At the Cuboid, the metadata, in form of a contributory view provided during
mediator registration, is stored and used for building of the global view. The
global view is configured and build by designer at the Cubiod site. Prepared
global view is then made available to the Adapter instance in form of
interoperable Data Access Objects (iDAO). Those objects are designed to cover each data
source contact details and its requested metadata with native queries.
Each time client requests from Adapter one of global views1, Adapter reaches
for requested global view from Cuboid and unmarshalls out of it native queries,
together with contact details to the data source of their origin. Using the
contact details Adapter sends native queries to original data sources and receives
requested result sets. This is happening at the lowest level - ie. JDBC. Now the
result sets are being composed together based on global view. When the global
view is ready in materialized form, it shall be made available to the client in
unified way - ie. in form of REST API.</p>
        <p>
          The entire process involves complex metamodel for collecting and transforming
contributory and global metadata. This information has been discussed with
details and examples in [
          <xref ref-type="bibr" rid="ref10 ref11">11, 10</xref>
          ].
        </p>
        <p>The discussed optimization method in form of Order Dependencies (OD) can be
easily applied with use of Cuboid architecture. Without need to interfere with
database optimization engines we will be able to rewrite queries stored at the
site of Cuboid.
4.1</p>
      </sec>
    </sec>
    <sec id="sec-15">
      <title>Unified data access interface</title>
      <p>As depict in fig. 2, client calls for the optimized resource are supposed to be
commenced using REST API. The construct of the client REST API includes
non optimized and optimized version of the query.</p>
      <p>While requesting client will use the REST API to define whether the query
response ie. result set, is going to be processed using non optimized version
of the query or optimized. We have prepared four implementations for data
access layers. Two of them - using JdbcTemplate and SimpleJdbcCall- are Spring
Framework based and third is pure JDBC. The final method gets the pmin and
pmax hard coded. This is to compare the time of pmin and pmax retrieval and
overhead that is brought by each of the three remaining methods.</p>
      <p>The REST API is designed as follows. To retrieve unoptimized query answer
the request URL should look like this:
http://localhost:8080/DIAS/rest/dbs/facts/2008-01-01:2008-01-02
1 The Cuboid can store many arbitrarily customized global views depending on
designer requirements.
Now, to request for an optimized query depending on query commuting
mechanism the URL would change to:
http://localhost:8080/DIAS/rest/dbs/facts/2008-01-01:2008-01-02/opti/X
Where X stands for the query commit method number. The X values has been
assigned as follows:
1. Spring simpleJdbcCall (stored functions)
2. Spring JDBCTemplate call statement (stored functions)
3. pure JDBC connection (stored functions)
4. Spring JdbcTemplate with (sub-queries rewrite)
5. hard coded pmin, pmax values</p>
      <p>This way we can get the necessary optimization method in simple and
straightforward manner. We will present the results in following section.
5</p>
      <sec id="sec-15-1">
        <title>Experiments</title>
        <p>Let us first describe the testing environment. The tests has been performed using
the following hardware:</p>
        <p>CPU Intel Core i7-3612QM CPU @ 2.10 GHz x 8
RAM 15,6 GiB
Disk SAMSUNG SSD PM830 2.5” 7mm 512GB
OS Ubuntu 14.04 LTS
Kernel 3.13.0-30-generic
Arch. x86 64 GNU/Linux</p>
        <p>The test cases assumed two optimization methods. One was to rewrite query
with substitution of WHERE clause with two stored function results. For
comparison reasons, the second case (fifth method) assumed replacing the stored
functions with simple sub queries to achieve the same goal as in the firs case.
Namely:</p>
        <p>Listing 1.5. Simple rewrite with sub-queries
SELECT f i d , sum( a g g r v ) ,
FROM f a c t s</p>
      </sec>
    </sec>
    <sec id="sec-16">
      <title>WHERE f d a t e BETWEEN ( s e l e c t min( f i d ) from f a c t s</title>
      <p>where f d a t e &gt;= x )</p>
    </sec>
    <sec id="sec-17">
      <title>AND ( s e l e c t max( f i d ) from f a c t s</title>
      <p>where f d a t e &lt;= y )</p>
    </sec>
    <sec id="sec-18">
      <title>GROUP BY c i d ;</title>
      <p>All tested use cases were conducted against the same request parameters and
source data. The queried data range was between 2008-01-01 and 2008-01-02.
The result size was 31,546 MB. Each method has been tested 50 times.</p>
      <p>Measuring database response times for pmin and pmax was based on Java’s
currentTimeMilis() method from java.lang.System 2.</p>
      <p>The test results has been placed in table 3.</p>
      <p>The results has clearly shown that rewriting the WHERE clause boosts the
target query almost 4 times. This is while only modifying the WHERE clause with
subqueries enabling primary key in role of index. This gives us the idea of how
order dependency based query can be effective. Both of the queries do operate
on f date column that has not even been indexed. The result would be greatly
better if only we would place an index on f date column. The hard coded column
values for pmin and pmax are presented to compare the time performance of the
query itself without rewriting process.</p>
      <p>
        Three remaining JDBC-based use cases for (pmin,pmax) retrieval, are at worst
three times slower than the hard coded (pmin,pmax) pair.
2 The detailed discussion for choosing this method has been conducted in [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ]
In general we have gained a speed boost form 87.681 seconds to only 0.027
seconds, which reduced the time of result retrieval for approx. 99,96%. Such
gain for the discussed use case, is achieved with best - pure JDBC - method,
comparing to non optimized query.
6
      </p>
      <sec id="sec-18-1">
        <title>Conclusions</title>
        <p>In this paper we have analyzed so called order dependencies and their
optimisation potential when applied at the middleware level. An order dependency is
a functional dependency such that its induced function is monotonic with
respect to linear orderings of domains. We have proposed an optimisation method
that exploits order dependencies on primary keys. We have prepared its
proofof-concept implementation on the middleware level (the cuboid). Middleware
has amounted to a feasible place for such optimisations and made such a
solution vendor neutral. We have also performed experimental evaluation of this
implementation and got promising results.</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Szlichta</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Godfrey</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gryz</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          , Ma,
          <string-name>
            <given-names>W.</given-names>
            ,
            <surname>Pawluk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            ,
            <surname>Zuzarte</surname>
          </string-name>
          ,
          <string-name>
            <surname>C.</surname>
          </string-name>
          :
          <article-title>Queries on dates: fast yet not blind</article-title>
          . In Ailamaki,
          <string-name>
            <given-names>A.</given-names>
            ,
            <surname>Amer-Yahia</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            ,
            <surname>Patel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.M.</given-names>
            ,
            <surname>Risch</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            ,
            <surname>Senellart</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            ,
            <surname>Stoyanovich</surname>
          </string-name>
          , J., eds.: EDBT,
          <string-name>
            <surname>ACM</surname>
          </string-name>
          (
          <year>2011</year>
          )
          <fpage>497</fpage>
          -
          <lpage>502</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Szlichta</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Godfrey</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gryz</surname>
          </string-name>
          , J.:
          <article-title>Fundamentals of order dependencies</article-title>
          .
          <source>PVLDB 5</source>
          (
          <year>2012</year>
          )
          <fpage>1220</fpage>
          -
          <lpage>1231</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Szlichta</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Godfrey</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gryz</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zuzarte</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>Expressiveness and complexity of order dependencies</article-title>
          .
          <source>PVLDB 6</source>
          (
          <year>2013</year>
          )
          <fpage>1858</fpage>
          -
          <lpage>1869</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Szlichta</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Godfrey</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gryz</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          , Ma,
          <string-name>
            <given-names>W.</given-names>
            ,
            <surname>Qiu</surname>
          </string-name>
          ,
          <string-name>
            <given-names>W.</given-names>
            ,
            <surname>Zuzarte</surname>
          </string-name>
          ,
          <string-name>
            <surname>C.</surname>
          </string-name>
          :
          <article-title>Businessintelligence queries with order dependencies in db2</article-title>
          . In Amer-Yahia,
          <string-name>
            <given-names>S.</given-names>
            ,
            <surname>Christophides</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            ,
            <surname>Kementsietsidis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            ,
            <surname>Garofalakis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.N.</given-names>
            ,
            <surname>Idreos</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            ,
            <surname>Leroy</surname>
          </string-name>
          , V., eds.: EDBT, OpenProceedings.org (
          <year>2014</year>
          )
          <fpage>750</fpage>
          -
          <lpage>761</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Gawarkiewicz</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wiśniewski</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Partial aggregation using Hibernate</article-title>
          . In Kim, T.H.,
          <string-name>
            <surname>Adeli</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Slezak</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sandnes</surname>
            ,
            <given-names>F.E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Song</surname>
            ,
            <given-names>X.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Chung</surname>
            ,
            <given-names>K.I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Arnett</surname>
          </string-name>
          , K.P., eds.
          <source>: FGIT</source>
          . Volume
          <volume>7105</volume>
          of Lecture Notes in Computer Science., Springer (
          <year>2011</year>
          )
          <fpage>90</fpage>
          -
          <lpage>99</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Wiśniewski</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Szumowska</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Burzańska</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Boniewicz</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          :
          <article-title>Hibernate the recursive queries - defining the recursive queries using Hibernate ORM</article-title>
          . In Eder, J., Bielikova´,
          <string-name>
            <given-names>M.</given-names>
            ,
            <surname>Tjoa</surname>
          </string-name>
          , A.M., eds.:
          <source>ADBIS (2)</source>
          . Volume 789 of CEUR Workshop Proceedings., CEUR-WS.org (
          <year>2011</year>
          )
          <fpage>190</fpage>
          -
          <lpage>199</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Gawarkiewicz</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wiśniewski</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Stencel</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>Enhanced segment trees in objectrelational mapping</article-title>
          .
          <source>In: Proceedings of the 6th Balkan Conference in Informatics. BCI '13</source>
          , New York, NY, USA, ACM (
          <year>2013</year>
          )
          <fpage>122</fpage>
          -
          <lpage>128</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Wiśniewski</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Stencel</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>Query rewriting based on meta-granular aggregation</article-title>
          . In Szczuka,
          <string-name>
            <given-names>M.</given-names>
            ,
            <surname>Czaja</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            ,
            <surname>Kacprzak</surname>
          </string-name>
          , M., eds.
          <source>: Proceedings of the 22nd International Workshop on Concurrency, Specification and Programming (CS&amp;P</source>
          <year>2013</year>
          ), Białystok, Białystok University of Technology (
          <year>2013</year>
          )
          <fpage>457</fpage>
          -
          <lpage>468</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Boniewicz</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wisniewski</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Stencel</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>On materializing paths for faster recursive querying</article-title>
          . In Catania,
          <string-name>
            <given-names>B.</given-names>
            ,
            <surname>Cerquitelli</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            ,
            <surname>Chiusano</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            ,
            <surname>Guerrini</surname>
          </string-name>
          ,
          <string-name>
            <surname>G.</surname>
          </string-name>
          , Ka¨mpf,
          <string-name>
            <given-names>M.</given-names>
            ,
            <surname>Kemper</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            ,
            <surname>Novikov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            ,
            <surname>Palpanas</surname>
          </string-name>
          ,
          <string-name>
            <surname>T.</surname>
          </string-name>
          , Pokorny´,
          <string-name>
            <given-names>J.</given-names>
            ,
            <surname>Vakali</surname>
          </string-name>
          , A., eds.:
          <source>ADBIS (2). Volume 241 of Advances in Intelligent Systems and Computing</source>
          ., Springer (
          <year>2013</year>
          )
          <fpage>105</fpage>
          -
          <lpage>112</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Chromiak</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Stencel</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>The linkup data structure for heterogeneous data integration platform</article-title>
          . In Kim, T.H.,
          <string-name>
            <surname>Lee</surname>
            ,
            <given-names>Y.H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Fang</surname>
          </string-name>
          , W.C., eds.
          <source>: FGIT</source>
          . Volume
          <volume>7709</volume>
          of Lecture Notes in Computer Science., Springer (
          <year>2012</year>
          )
          <fpage>263</fpage>
          -
          <lpage>274</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Chromiak</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Stencel</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>A data model for heterogeneous data integration architecture</article-title>
          . In Kozielski, S.,
          <string-name>
            <surname>Mrozek</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kasprowski</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Malysiak-Mrozek</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kostrzewa</surname>
          </string-name>
          , D., eds.
          <source>: BDAS</source>
          . Volume
          <volume>424</volume>
          of Communications in Computer and Information Science., Springer (
          <year>2014</year>
          )
          <fpage>547</fpage>
          -
          <lpage>556</lpage>
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Chromiak</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lojewski</surname>
            ,
            <given-names>Z.</given-names>
          </string-name>
          :
          <article-title>Stream security particularities in java</article-title>
          . Ann. UMCS, Inf.
          <volume>8</volume>
          (
          <issue>2008</issue>
          )
          <fpage>5</fpage>
          -
          <lpage>13</lpage>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>