DEV Community

Franz Wong
Franz Wong

Posted on • Edited on

Setup kdb+tick with Java feed handler

[I started learning kdb few weeks ago, so I would like to ]

kdb+tick is used to capture the ticks and store them. The ticks are provided by the feed handler.

Here is the architecture diagram from Kx.

Alt Text

We will setup a simple kdb+tick first and then we will create our feed handler in Java. We assume you have already installed kdb+.

Let's create our workspace.

mkdir kdb-tick-java-fh-example 

Setup kdb+tick

Next, we need to clone KxSystems/kdb+tick.

# Execute this in 'kdb-tick-java-fh-example' folder git clone https://github.com/KxSystems/kdb-tick.git 

We will add schema file sym.q.

# Execute this in 'kdb-tick' folder touch tick/sym.q 

Here is the content of sym.q.

quote:([]time:`timespan$();sym:`symbol$();bid:`float$();ask:`float$();bsize:`int$();asize:`int$()) trade:([]time:`timespan$();sym:`symbol$();price:`float$();size:`int$()) 

This is directory structure of 'kdb-tick' folder.

Alt Text

We need to start both tickerplant and RDB. We will keep the processes in foreground for this tutorial, so you need 2 terminals to hold them. In production, you should send them to background.

Start tickerplant

# Execute this in 'kdb-tick' folder q tick.q sym $(pwd)/OnDiskDB -p 5000 

Start RDB

# Execute this in 'kdb-tick' folder q tick/r.q localhost:5000 localhost:5002 -p 5001 

Create feed handler with Java

Before we create our feed handler, we need to get Java driver for kdb. I can't find that in any Maven repository, so we need to get it from Kx's Git repository. It is just a single file c.java.

# Execute this in 'kdb-tick-java-fh-example' folder git clone https://github.com/KxSystems/javakdb.git 

Now we create our feed handler.

# Execute this in 'kdb-tick-java-fh-example' folder # Copy c.java to our feed handler mkdir -p feed-handler-java/src/main/java/kx cp javakdb/src/kx/c.java feed-handler-java/src/main/java/kx # Create feed handler mkdir -p feed-handler-java/src/main/java/fh touch feed-handler-java/src/main/java/fh/FeedHandler.java 

Here is content of FeedHandler.java

package fh; import kx.c; public class FeedHandler { public static void main(String[] args) throws Exception { c c = null; try { System.out.println("Try to connect to tickerplant"); c = new c("localhost", 5000); System.out.println("Connected to tickerplant"); Object[] row = { new c.Timespan(), "MSFT", 174.57, 300L }; System.out.println("Try to insert record to 'trade' table"); c.k(".u.upd", "trade", row); System.out.println("Record inserted to 'trade' table"); } catch (Exception e) { throw e; } finally { c.close(); } } } 

This is directory structure of 'feed-handler-java' folder.

Alt Text

We can build our feed handler.

# Execute this in 'feed-handler-java' folder javac \ -sourcepath "src/main/java" \ -d "target/classes" \ src/main/java/fh/FeedHandler.java 

After our feed handler is built, we can execute it.

# Execute this in 'feed-handler-java' folder java -cp "target/classes" fh.FeedHandler 

We go back to the terminal of our running RDB to verify the result.

select from trade 

You should see something like this.

time sym price size ------------------------------------- 0D10:58:46.733000000 MSFT 174.57 300 

To exit q process, you can input exit 0 or simply \\.

We have created our feed handler. You can check the reference links at the bottom to get more information about kdb+tick and Java driver for kdb.

References

Building real-time tick subscribers
Using Java with kdb+

Top comments (0)