-
Notifications
You must be signed in to change notification settings - Fork 10
ResultHandler
LunarBase has an event driven framework(EDF) to control the data flow. In case we need to do something with the query result, say sort them by payment, date, or something else, we shall implement a new result handler and register it to EDF, then the engine knows how to execute it.
Here is an OrderBy:
public class ResultOrderBy implements LHandler<Event, Void> {
public final String property;
public final boolean inverted;
public ResultOrderBy(String _property, boolean _inverted) {
this.property = _property;
this.inverted = _inverted;
}
public Void execute(Event evt) {
if (evt.getClass() == QueryResult.class) {
QueryResult recs = (QueryResult) evt;
internalExecute( recs._results, this.property, this.inverted);
return null;
}
return null;
}
Any customized handler must implement the LHandler interface execute(Event evt). Here this example deal with the event QueryResult, and returns null. We use Void as the return value for simplicity.
Then we register it, of course the original one will be replaced. The complete code is SortByComplete:
String db_root = "/home/feiben/DBTest/SeventhDB";
DBTaskCenter tc = new DBTaskCenter(db_root);
String table = "order";
/*
* Step1: create an instance of result handler,
* in which we process the query results.
* Tasks like ranking, calculation, or any thing you want to deal with.
*/
ResultOrderBy my_handler = new ResultOrderBy("payment", false);
/*
* Step2: The DBTaskCenter has default handler, which just
* simply print all the query results from the latest to the eldest.
*/
if(tc.hasHandler(QueryResult.class))
{
tc.replaceHandler(QueryResult.class, my_handler);
}
/*
* Step3: then construct a new query, see if my new handler works :-)
*/
QuerySimple sq = new QuerySimple(table, "age", "36", 1000);
tc.dispatch(sq);
tc.shutdownDB();
1 Home
1.1 summary
1.2 System Preparation
1.3 When LunarBase is your best choice
1.4 Benchmark
1.5 Power consumption
2 Data Model And Process
2.1 Why internal big cache
2.2 Memory Management: LunarMMU
2.3 Garbage Collection
2.4 Transaction Log
2.5 JOIN via materialized view
3 Real Time Computation: LunarMax
3.1 In-Memory File System: Memory Estimation
3.2 Configuration
3.3 Use SSD as a cheaper memory
3.4 Data Safety
3.5 HE Server VS. Cluster
3.6 High Availability
4 Create a database
4.1 Three modes
4.2 creation.conf settings
4.3 Table space
4.4 Multiple Instance
4.5 Database Status
4.6 Remove and Restore a table
5 Insertion
5.1 Insert as normal record
5.2 Insert to search engine
6 Query
6.1 Point Query
6.2 Result Handler: register your own event handler
6.3 Interpreter Pattern: complex query conditions
6.4 Range Query
6.5 Full-text Search
6.6 Algebraic Logical Query
8 Deletion
9 Materialized view
9.1 Eventual consistency
9.2 Update
9.3 MVCC in LunarBase
9.4 Easy JOIN via denormalization
9.5 CRUD in view
10 Distributed integration with
10.1 Kafka
10.2 Storm
10.3 Spark
11 Storage: Lunar Virtual File System
13 Roadmap of LunarBase future
15 FAQ