<!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>To Sort or not to Sort: The Evaluation of R-Tree and B +-Tree in Transactional Environment with Ordered Result Set Requirement</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>George Erokhin Kirill Cherednik George Chernishev</string-name>
          <email>chernishevg@gmail.com</email>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Kirill Smirnov</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Proceedings of the Ninth Spring Researcher's Colloquium on Database and Information Systems</institution>
          ,
          <addr-line>Kazan, Russia, 2013</addr-line>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Saint-Petersburg University</institution>
        </aff>
      </contrib-group>
      <fpage>101</fpage>
      <lpage>108</lpage>
      <abstract>
        <p>In this paper we consider multidimensional indexing with the additional constraint of lexicographical ordering. In order to deal with this problem we discuss two well-known tree data structures: R-Tree and B-Tree. We study the problem in the transactional environment with read committed isolation level. To evaluate these approaches we had implemented these structures (modified GiST ensures concurrency) and provide extensive experiments. This work is partially supported by Russian Foundation for Basic Research grant 12-07-31050.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>In this paper we consider the problem of
multidimensional indexing with one additional constraint — the
lexicographical ordering of the resultset. Effective
multidimensional indexing is rather old and well-explored topic,
however, one can’t say that the problem is solved. New
approaches continue to emerge. The addition of the
ordering requirement further drives this problem into the
domain of research activity.</p>
      <p>Effective solutions for the problem of
multidimensional indexing are needed for geospatial data, CAD
systems, multimedia data and also of use for OLAP data.</p>
      <p>There are two main approaches for multidimensional
indexing: tree-based and hash-based. The former are
RTree, KDB tree, Octree, X-Tree and many others. The
latter are mainly used for nearest neighboor and
similarity query evaluation.</p>
      <p>
        We are mainly interested in R-Tree because of it’s
popularity in commercial DBMS systems [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ]:
PostgreSQL, Oracle, Informix, SQLite and MySQL use this
approach. This interest proves, that despite being rather
old (more than 25 years), R-Tree still may be called
industrial-strength technology. Moreover, until recently
R-Tree was the only one method of multidimensional
indexing in PostgreSQL1.
The task offered at the contest was to build a
multidimensional high-throughput in-memory indexing system. The
index should support concurrent access by many threads
and work within read committed isolation level. The
index resides in-memory and no crash-recovery
component is required.
      </p>
      <p>2http://wwwdb.inf.tu-dresden.de/sigmod2012contest/
leaderboard/
There are several possible types of queries:</p>
      <p>Point queries: insert, update, delete and select.
Range queries — they select a subset of data and
the result should be sorted. This type of query is
defined by a conjunction of attribute predicates. The
individual predicates may be not only be intervals or
points, but also a wildcards.</p>
      <p>The distribution of query types is described in the
specification and it can be tuned.</p>
      <p>
        Another important aspect to consider is the admissible
amount of operations per transaction. It is specified, that
there are no more than few hundred retrieved points per
transaction. In particular, the original task states that no
more that 200 points are touched by any transaction. This
number is justified by the fact that OLTP transactions are
very light-weight. For examle, the heaviest transaction
in TPC-C reads about 200 records [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
2.2
      </p>
    </sec>
    <sec id="sec-2">
      <title>Data And Workloads</title>
      <p>The task statement specifies several datatypes:INT(4),
INT(8) and VARCHAR(512). However, in this work, we
had to drop VARCHAR (see section 5 for details). The
key consists of several attributes of these datatypes. The
payload is represented by a sequence of bytes.</p>
      <p>The data may come in one of several types of
distributions: normal, uniform and zipf (each is applied to
coordinate independently). In our tests we used only uniform
one.</p>
      <p>Duplicate keys are allowed, we refer the reader to the
web site for the detailed handling description.</p>
      <p>In our experiments we heavily rely upon workloads
and benchmark driver provided by organizers. These
workloads are essentially synthetic datasets. We don’t
reuse workloads used during the contest, instead we use
the provided framework to define our own.</p>
      <p>Thorough task specification can be found here3.
3</p>
      <sec id="sec-2-1">
        <title>Related Work And Architectural Alternatives</title>
        <p>
          In order to solve this problem two architectural
approaches may be used. The first one is to use B+-Tree
and concatenate the values of individual coordinates into
the composite key. The B+-Tree [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ] is the balanced
data structure, which contains values in the leaf nodes
while inner nodes contain pointers and intervals. These
intervals define the unique path to the leaf.
        </p>
        <p>The strong points of this approach are:</p>
        <p>The overall simplicity of this data structure and
general easiness for implementation.</p>
        <p>
          The abudance of concurrency control mechanisms
for this kind of tree [
          <xref ref-type="bibr" rid="ref13">13</xref>
          ].
        </p>
        <p>It is possible to tune one, a lot of cache-conscious
modifications exist.
3http://wwwdb.inf.tu-dresden.de/sigmod2012contest/
No need to sort, because keys are already stored in
the right order.</p>
        <p>Let’s review the last item. Suppose that we have a
three dimensional index and a query: (1; 2; ). In order
to evaluate it, we have to find the first entry with
prefix \1j2j" and then sequentially scan the tree until prefix
mismatch.</p>
        <p>However one can name weak points:</p>
        <p>We have to pack and unpack the keys with each
comparison.</p>
        <p>Queries containing interval predicates are harder to
process.</p>
        <p>This tree may perform poorly with wildcard queries.</p>
        <p>The first one is the minor drawback, its cost may be
negligible. However, the second and the third are more
formidable ones.</p>
        <p>The intervals inside attributes can be processed in the
same manner as above, but additional checks are needed.
This results in additional complexity of the
implementation.</p>
        <p>Regarding the third item, consider query (1; ; 3). In
order to evaluate it, we have to find the key starting with
a prefix \1", then we have to iterate through all values
which have it. It will require a lot more of comparisons,
and what is more important, we will be forced to discard
a lot of value in the middle. Consider the following leaf
level:</p>
        <p>1j2j3j; 1j2j4j; 1j2j4j; :::; 1j2j4j; 1j3j3j:</p>
        <p>In this situation we will need only two values: 1j2j3j
and 1j3j3j. But we would be forced to iterate through
all these values and discard them.The situation becomes
grave when we have wilcard condition in the first
attribute: ( ; 2; 3). In this case we have to scan the whole
index.</p>
        <p>
          R-Tree is the specialized data structure proposed first
by Antonin Guttman in [
          <xref ref-type="bibr" rid="ref6">6</xref>
          ]. This study prompted a wave
of research papers and one can say that it gave birth to
the new area of research. This research related to
development of the new R-Tree variants [
          <xref ref-type="bibr" rid="ref11 ref4 ref8">4, 8, 11</xref>
          ], niche
approaches [
          <xref ref-type="bibr" rid="ref10 ref11">10, 11</xref>
          ], split techniques [
          <xref ref-type="bibr" rid="ref2 ref3 ref5">2, 3, 5</xref>
          ], concurrency
techniques [
          <xref ref-type="bibr" rid="ref7 ref9">7, 9</xref>
          ] etc. The study [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ] states that there is
more than 100 variants of R-Trees.
        </p>
        <p>R-Tree can be thought of as an extension of B-Tree
for multidimensional indexing. It shares some concepts:</p>
        <sec id="sec-2-1-1">
          <title>Data are kept in the leaves, too.</title>
        </sec>
        <sec id="sec-2-1-2">
          <title>This data structure is also balanced.</title>
          <p>Inner nodes keep bounding boxes, which may be
thought as the generalization of intervals.</p>
        </sec>
        <sec id="sec-2-1-3">
          <title>The main differences are:</title>
          <p>There may be more than one path to the key. This is
the result of bounding box intersection permission.
Node split is unambiguous, determining the optimal
node split is a very hard problem.</p>
          <p>No link to sibling leaves for easy range query
execution.</p>
          <p>
            GiST (Generalized Search Tree) [
            <xref ref-type="bibr" rid="ref9">9</xref>
            ] is a “template”
index structure which supports extensible set of queries
and datatypes. This index can be parametrized by a
variety of data structures.
          </p>
          <p>Unlike B+-Tree based one, this approach would
require sorting of the results. This is a significant drawback
which may negatively impact performance. The goal of
this paper is to evaluate, which of these approaches is
better. Intuitively one can say that the outcome should
depend on the query selectivity.
4</p>
        </sec>
      </sec>
      <sec id="sec-2-2">
        <title>System Overview</title>
        <p>Our system follows classical design guidelines and
contains several components:</p>
        <p>
          A tree data structure. Currently implemented as
B+-Tree and R-Tree. R-Tree is based upon GiST
[
          <xref ref-type="bibr" rid="ref7">7</xref>
          ], a popular template index structure including
concurrency control techniques. This model allows
to extend with the means of concurrent access
almost any tree conforming to certain requirements.
This is a widespread approach and it is used, for
example, in PostgreSQL.
        </p>
        <p>
          Concurrency control. We used mechanism adapted
from [
          <xref ref-type="bibr" rid="ref9">9</xref>
          ] with locks, latches and Node Sequence
Numbers. Also we provided deadlock resolution
mechanism. Eventually, we ensure the read
committed isolation level. However currently our
prototype lacks logging and recovery features.
        </p>
        <p>Memory manager. It is a well-know fact that a
standard memory manager can’t provide optimal
performance for the whole range of applications
and sometimes it is desirable to find or implement
a specifically-tailored one. Our memory manager
is essentially a wrapper which intercepts new and
delete calls to make use a pool of free blocks.
Sorting of the results. In order to solve the
problem one must present lexicographically sorted
results. While B+-Tree provides already ordered
results, R-Tree does not. Our R-Tree implementation
sorts the results via merge-sort (we keep sorted data
inside boxes).</p>
        <p>Deletion of records. In our implementation we
don’t delete records, instead, we mark them as
“deleted” and take this into account during the
processing.
5
5.1</p>
      </sec>
      <sec id="sec-2-3">
        <title>Validation and Experiments</title>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Validation</title>
      <p>
        We validated our implementation in two ways. First, we
used public unit-tests supplied by the contest organizers.
These unit-tests ensured correctness of an isolation level
(read committed) implementation and several other
implementation issues. We also extended basic set of test
cases with new ones. Then, our implementation
participated in the contest [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
5.2
      </p>
    </sec>
    <sec id="sec-4">
      <title>PostgreSQL validation and tuning</title>
      <p>We also compared our implementation with PostgreSQL
v9.1 database system. This step was needed to check the
relative level of achieved performance and general
transferability of results. We implemented a simple wrapper
application which directed queries to PostgreSQL.
PostgreSQL uses a disk-based GiST index, while our
prototype is an in-memory one. Also, our prototype lacks a
logging and recovery component. Thus, in order to
conduct fair tests we had to simulate in-memory index in
PostgreSQL.</p>
      <p>To completely eliminate slow disk-related operations
we placed database cluster on tmpfs. This way we can
be sure that every operation PostgreSQL performs
(logging, committing, buffers flushing, etc) does not involve
interactions with a hard drive.</p>
      <p>Other important implementation aspects included:
Wrapper connection pooling. We used a pool of
connections inside our wrapper to eliminate the cost
of connection creation every time a transaction is
executed.</p>
      <p>We parametrized GiST with cube data structure.
To eliminate overheads related to durability we
turned off: fsync, full page writes and synchronous
commit. Checkpoint segments setting was left
intact.</p>
      <p>We were forced to abandon string datatype due to
PostgreSQL cube restrictions (only float parameters
supported).</p>
      <p>PostgreSQL runs in read committed isolation level
by default.</p>
      <p>Unfortunately, due to several reasons, we were not able
to completely approach the performance of our system.
First, unlike BDB, PostgreSQL needs to maintain not
only the index, but also a table. Second, calls to
PostgreSQL via connections are less effective than the direct
function calls. The last issue is the security checks which
were also left intact.
5.3</p>
    </sec>
    <sec id="sec-5">
      <title>Hardware and software setup</title>
      <p>For the first group of experiments (comparison with
PostgreSQL and Berkeley DB) used the following hardware
and software setup:</p>
      <p>Intel Core i7-2630QM, 2.00 GHz, Hyper-Threading
Enabled, L1 Cache 64KB, L2 Cache 256 (per core),
L3 Cache 6MB, 6GB RAM
x86 64 GNU/Linux, kernel 3.5.0-21, gcc 4.7.2</p>
      <sec id="sec-5-1">
        <title>PostgreSQL 9.1.7</title>
        <p>The second group used the more performing one:
Hardware: 2 x Intel Xeon CPU E5-2660 0 @
2.20GHz, 64GB RAM, MB S2600GZ
Software: Linux Ubuntu 3.2.0-29-generic x86 64,
GCC 4.6.3
In this section we provide a comparison of our prototypes
with industrial strength systems. The wrapper for
Berkeley DB was provided by the organizers, PostgreSQL
wrapper was developed by the authors (it’s architecture
was described earlier). We compare the performance
varing the number of dimension and use single 64MB index.
The query type distribution is the same as in the original
contest task, uniformly distributed data was used.</p>
        <p>We can see:</p>
        <p>Our prototypes are comparable to industrial ones in
terms of overall performance.</p>
        <p>The solution which uses R-Tree significantly differs
from B+-Tree in terms of performance. This
difference has prompted us into further investigation,
which resulted in this paper.
5.5</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Experimental Evaluation</title>
      <p>The goal of this paper is to evaluate, what is better: to
use R-Tree and to sort or not to sort with B+-Tree, but
risk excess comparisons.</p>
      <p>In order to solve this problem we had conducted a
series of experiments. In these experiments we evaluate
the performance of two systems, while varing the query
selectivity. We separately consider the following
dimensions: 2, 4, 6, 8. We had considered indexes of two sizes:
64 and 512 MB, uniform data distribution. We
concentrate on the most interesting query type, which present
in the original contest workload: a range query without
wildcard predicates. These experiments were conducted
using our prototypes, which we had described in the
previous section. The reason of this switch is the time it
takes to construct an index by PostgreSQL DBMS and
also the query plan problem. The plans which are
generated by the optimizer are essentially the following: at
first, perform index scan (e.g. read all R-Tree boxes),
then sort the results. It is impossible to push down
sorting in PostgreSQL because it’s GiST selection method
doesn’t uses merge-sort. This is a critical drawback,
because in our task we select at most 200 entries. Thus,
our prototype can read only a part of the data and don’t
sort all the content of the touched boxes. The query plan
problem is not an issue in BDB, because of the simplicity
of BDB and the fact that B+-Tree is already sorted.</p>
      <p>The results are presented on Figures 3-6.</p>
      <p>Note the double logarithmic scales, which we used in
order to illustrate our finds. They are the following:
The throughput of the system depends on a query
selectivity. This dependence can be described by
the power law:</p>
      <p>P = a</p>
      <p>Sb;
where P denotes the throughput, S — query
selectivity, a and b are parameters. The graphs show this
kind of dependency by the straight line. This
approximately linear dependency persists in all
considered dimension sizes.</p>
      <sec id="sec-6-1">
        <title>Tree type</title>
        <p>R-Tree (64MB)
R-Tree (512MB)
B+-Tree (64MB)
B+-Tree (512MB)
The considered query type affects the performance
of the systems in the following way: the
performance of R-Tree degrades as the value of query
selectivity decreases, while at the same time B+-Tree
performance increases.</p>
        <p>As the number of dimensions increases, the
exponent b changes in the way shown in the Table 1.
Increasing the dimensionality leads to b decrease in
case of R-Tree, i.e. having more dimensions lowers
impact of query selectivity. There is no manifested
trend in B+-Tree behaviour.</p>
        <p>The following hypothesis can be advanced: the
exponent in power-law does not depend on size of the
index, only on dimensionality. To prove this
hypothesis more thoroughful investigation is needed.
There is no simple way to determine intersection
point of R-Tree and B-Tree, it depends on number
of dimensions and index size.
6</p>
        <sec id="sec-6-1-1">
          <title>Conclusions</title>
          <p>In this paper we have considered the problem of
multidimensional point indexing and under condition of
additional restriction: ordering the results. We have
experimentally evaluated two data structures — R-Tree and
B+-Tree on uniformly distributed data. The experiments
allowed us to establish the impact of the query selectivity
on system performance as power function. Also we
examined the dependency of power-law parameters on
dimension. As a future work we will provide more
empirical evidence to the hypothesis of independance of
powerlaw exponent on index size. Recommendation for B-Tree
and R-Tree user: unfortunately, we were not able to find
an easy way to calculate intersection point, so workloads
should be evaluated ad hoc.
7</p>
        </sec>
        <sec id="sec-6-1-2">
          <title>Acknowledgements</title>
          <p>We would like to thank organizers of ACM SIGMOD
Programming Contest’12 for providing a benchmark,
data generator, unit tests and Berkeley DB wrapper
implementation. This work is partially supported by
Russian Foundation for Basic Research grant 12-07-31050.
)
d
n
o
c
e
s
r
e
sp105
n
o
i
t
c
a
s
n
a
r
t
t( 104
u
p
h
g
u
o
r
h
T</p>
          <p>+
103
2
+
4
+
4</p>
        </sec>
      </sec>
      <sec id="sec-6-2">
        <title>Dimension</title>
        <p>6
+
6
+
8
+
8
Query selectivity
+
+</p>
        <p>+ + + + + + + + + +
+ + + + + + + + + +
+ + + + + + + + + + +</p>
      </sec>
      <sec id="sec-6-3">
        <title>R-Tree</title>
        <p>B-Tree
+
+ + + + + + + + +</p>
      </sec>
      <sec id="sec-6-4">
        <title>R-Tree</title>
        <p>B-Tree
+
+ + + + + + + + + + +
103 10 4
10 3
Query selectivity</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>ACM</given-names>
            <surname>SIGMOD Programming Contest</surname>
          </string-name>
          '
          <volume>12</volume>
          . http://wwwdb.inf.tu-dresden.de/ sigmod2012contest/. Last accessed:
          <volume>11</volume>
          /09/
          <year>2012</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <surname>Amer</surname>
            <given-names>F.</given-names>
          </string-name>
          <string-name>
            <surname>Al-Badarneh</surname>
            ,
            <given-names>Qussai</given-names>
          </string-name>
          <string-name>
            <surname>Yaseen</surname>
            , and
            <given-names>Ismail</given-names>
          </string-name>
          <string-name>
            <surname>Hmeidi</surname>
          </string-name>
          .
          <article-title>A new enhancement to the R-tree node splitting</article-title>
          .
          <source>J. Inf. Sci.</source>
          ,
          <volume>36</volume>
          (
          <issue>1</issue>
          ):
          <fpage>3</fpage>
          -
          <lpage>18</lpage>
          , feb
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>C.</given-names>
            <surname>Ang</surname>
          </string-name>
          and
          <string-name>
            <given-names>T.</given-names>
            <surname>Tan</surname>
          </string-name>
          .
          <article-title>New linear node splitting algorithm for R-trees</article-title>
          .
          <source>In Michel Scholl and Agne`s Voisard</source>
          , editors,
          <source>Advances in Spatial Databases</source>
          , volume
          <volume>1262</volume>
          of Lecture Notes in Computer Science, pages
          <fpage>337</fpage>
          -
          <lpage>349</lpage>
          . Springer Berlin / Heidelberg,
          <year>1997</year>
          .
          <volume>10</volume>
          .
          <issue>1007</issue>
          /3-540-63238-7
          <fpage>38</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>Norbert</given-names>
            <surname>Beckmann</surname>
          </string-name>
          and
          <string-name>
            <given-names>Bernhard</given-names>
            <surname>Seeger</surname>
          </string-name>
          . A revised R*
          <article-title>-tree in comparison with related index structures</article-title>
          .
          <source>In Proceedings of the 2009 ACM SIGMOD International Conference on Management of data, SIGMOD '09</source>
          , pages
          <fpage>799</fpage>
          -
          <lpage>812</lpage>
          , New York, NY, USA,
          <year>2009</year>
          . ACM.
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>Sotiris</given-names>
            <surname>Brakatsoulas</surname>
          </string-name>
          , Dieter Pfoser, and
          <string-name>
            <given-names>Yannis</given-names>
            <surname>Theodoridis. Revisiting R-Tree Construction</surname>
          </string-name>
          <article-title>Principles</article-title>
          .
          <source>In Proceedings of the 6th East European Conference on Advances in Databases and Information Systems</source>
          , ADBIS '
          <volume>02</volume>
          , pages
          <fpage>149</fpage>
          -
          <lpage>162</lpage>
          , London, UK, UK,
          <year>2002</year>
          . Springer-Verlag.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>Antonin</given-names>
            <surname>Guttman</surname>
          </string-name>
          .
          <article-title>R-trees: a dynamic index structure for spatial searching</article-title>
          .
          <source>SIGMOD Rec</source>
          .,
          <volume>14</volume>
          (
          <issue>2</issue>
          ):
          <fpage>47</fpage>
          -
          <lpage>57</lpage>
          ,
          <year>June 1984</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>Joseph</surname>
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Hellerstein</surname>
            ,
            <given-names>Jeffrey F.</given-names>
          </string-name>
          <string-name>
            <surname>Naughton</surname>
            , and
            <given-names>Avi</given-names>
          </string-name>
          <string-name>
            <surname>Pfeffer</surname>
          </string-name>
          .
          <article-title>Generalized Search Trees for Database Systems</article-title>
          .
          <source>In Proceedings of the 21th International Conference on Very Large Data Bases, VLDB '95</source>
          , pages
          <fpage>562</fpage>
          -
          <lpage>573</lpage>
          , San Francisco, CA, USA,
          <year>1995</year>
          . Morgan Kaufmann Publishers Inc.
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>Ibrahim</given-names>
            <surname>Kamel</surname>
          </string-name>
          and
          <string-name>
            <given-names>Christos</given-names>
            <surname>Faloutsos</surname>
          </string-name>
          . Hilbert Rtree:
          <article-title>An Improved R-tree using Fractals</article-title>
          .
          <source>In Proceedings of the 20th International Conference on Very Large Data Bases, VLDB '94</source>
          , pages
          <fpage>500</fpage>
          -
          <lpage>509</lpage>
          , San Francisco, CA, USA,
          <year>1994</year>
          . Morgan Kaufmann Publishers Inc.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>Marcel</given-names>
            <surname>Kornacker</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Mohan</surname>
          </string-name>
          , and
          <string-name>
            <surname>Joseph</surname>
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Hellerstein</surname>
          </string-name>
          .
          <article-title>Concurrency and recovery in generalized search trees</article-title>
          .
          <source>SIGMOD Rec</source>
          .,
          <volume>26</volume>
          (
          <issue>2</issue>
          ):
          <fpage>62</fpage>
          -
          <lpage>72</lpage>
          ,
          <year>June 1997</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <surname>Yannis</surname>
            <given-names>Manolopoulos</given-names>
          </string-name>
          , Alexandros Nanopoulos,
          <string-name>
            <given-names>Apostolos N.</given-names>
            <surname>Papadopoulos</surname>
          </string-name>
          , and
          <string-name>
            <given-names>Y.</given-names>
            <surname>Theodoridis. R-Trees</surname>
          </string-name>
          :
          <article-title>Theory and Applications (Advanced Information and Knowledge Processing)</article-title>
          . SpringerVerlag New York, Inc., Secaucus, NJ, USA,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <surname>Timos</surname>
            <given-names>K.</given-names>
          </string-name>
          <string-name>
            <surname>Sellis</surname>
            , Nick Roussopoulos, and
            <given-names>Christos</given-names>
          </string-name>
          <string-name>
            <surname>Faloutsos. The R</surname>
          </string-name>
          +
          <article-title>-Tree: A Dynamic Index for Multi-Dimensional Objects</article-title>
          .
          <source>In Proceedings of the 13th International Conference on Very Large Data Bases, VLDB '87</source>
          , pages
          <fpage>507</fpage>
          -
          <lpage>518</lpage>
          , San Francisco, CA, USA,
          <year>1987</year>
          . Morgan Kaufmann Publishers Inc.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>Michael</given-names>
            <surname>Stonebraker</surname>
          </string-name>
          , Samuel Madden, Daniel J. Abadi, Stavros Harizopoulos, Nabil Hachem, and
          <string-name>
            <given-names>Pat</given-names>
            <surname>Helland</surname>
          </string-name>
          .
          <article-title>The end of an architectural era: (it's time for a complete rewrite)</article-title>
          .
          <source>In Proceedings of the 33rd international conference on Very large data bases</source>
          ,
          <source>VLDB '07</source>
          , pages
          <fpage>1150</fpage>
          -
          <lpage>1160</lpage>
          . VLDB Endowment,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>Gerhard</given-names>
            <surname>Weikum</surname>
          </string-name>
          and
          <string-name>
            <given-names>Gottfried</given-names>
            <surname>Vossen</surname>
          </string-name>
          .
          <article-title>Transactional information systems: theory, algorithms, and the practice of concurrency control and recovery</article-title>
          . Morgan Kaufmann Publishers Inc., San Francisco, CA, USA,
          <year>2001</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>