Contributing to QuEval

How to contribute to QuEval?

One of our aims is to maintain an extensible framework so that other researcher can contribute to it and use it for their specific purposes. A central aspect of this extensibility is the possibility to add new index structures to the framework. To this end, an API exists that has to be implemented for each new index structure. You can find a documentation (JavaDoc style) of this interface at AIndexStructure -- Documentation. For contributing your own index-structure implementation, you have two possibilities: First your can provide Java-class files in the case you do not want reveal your source files. In this case, however we cannot verify your implementation, but list your index as unchecked with your name as contributor. Second, you can provide the sources, too. In this case, we will list you contribution as checked. In both cases, you can email your files directly to contribute If you like to contribute to different parts of QuEval, such as the storage structures or query scheduling and processing please contact us.

Tutorial: My first QuEval index structure

Before getting started

All of our index structures are loaded via reflection. The basic advantage is that you can program your index totally independent, copy your compiled .class file into the folder \index\structures and after restart the index is automatically available. QuEval simply scans this folders and loads every .class file that extends our interface AIndexStructure -- Documentation.
In case you use setting up, the environment is simpler. Import all projects into eclipse. To start QuEval, create a new external tool configuration with working directory ${workspace_loc:/JarTest/Framework}$ and following arguments: -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000,suspend=y -jar Framework.jar. Then create a new Remote Java Application using Project Testapp_Jar, lcalhost, and Port 8000. First, start the external tool configuration. You should see Listening for transport dt_socket at address: 8000 on the command line, then connect the remote application. We furthermore, recommend to extend the explicitly state maximum amount of heap the JVM is allowed to use via the -Xmx parameter.

Launch configurations in ECLIPSE.

Tutorial: My first QuEval index structure

Our interface contains several methods that need to be implemented in the following, we describe how to implement a simple index using a sequential scan. The complete source code of the sequential scan can be found in the package of the index project.

General purpose methods

These methods deliver meta information and thus, are easily implemented.

General purpose method implementations
For the constructors, we use a little trick to circumvent that we do not know the parameters (member variables) of all future indexes. Hence, one of the arguments is a Hash Map containing all parameters and respective variables. Here the the field name (as in the source code) is the key and the parameter value the reference value. The method initParameter(map); needs to be invoked first. It assigns the values to the respective fields in the class. This way we automatically set the desired parameter values.

Query-processing methods

There are several methods for query processing. Note in the default variant there are methods for inserting data, exact-match, and knn query capability. However, we also have different variants supporting range queries and epsilon-distance queries. In case you want more information or learn about variable interfaces and multi product line please contact Reimar Schröter.

Insert and exact match

Optinal glue code

Project members:

Copyright Notice: This material is presented to ensure timely dissemination of scholarly and technical work. Copyright and all rights therein are retained by authors or by other copyright holders. All persons copying this information are expected to adhere to the terms and constraints invoked by each author's copyright. In most cases, these works may not be reposted without the explicit permission of the copyright holder.