Skip to main content

HSQLDB

HSQLDB

It's been almost two years I've been using HSQLDB in one of my client-critical application.
When I was given the task of working on this application (which was already in production), main challenge was to reduce latency and also to make it flexible enough to accommodate any future use-cases.

Without going into to much details, here's my use-case:
  • Application receives data from multiple sources
  • Parse data from each source and extract required data
  • Aggregate this extracted data and find best candidate which satisfies certain rules

One simplest solution is to join data from all sources by having a (for-)loop, one each for a source and apply rules inside inner-most loop. As number of data sources increases, so does the latency.
HSQLDB came to my rescue. I used in-memory variant, as the data is non more required, once a candidate is found.

Data extracted from each source is stored into DB (from here on, DB => in-memory HSQLDB), wherein we have one table each for a data source.

Here come the best part.
Now all my rules for computation are mere SQL queries. Instead of going through the code, one can easily understand the rules by looking at this SQL queries.
By adding proper indices, which can be done by simple annotations, we can perform any complex query in almost no time (subject to the size of data).
It also comes with one more added benefit, flexibility. We can add/modify rules with almost no effort.

HSQLDB has a huge community and all your queries, if any, would have been already answered.

Please share your comments/queries below.
Will add samples and mocks, if required.

Comments

Popular posts from this blog

Ubuntu: Access a usb flash drive from the terminal

    1. Find what the drive is called You'll need to know what the drive is called to mount it. To do that fire off: sudo fdisk -l You're looking for a partition that should look something like:   /dev/sdb1 . Remember what it's called. 2. Create a mount point Create a new directory in   /media   so you can mount the drive onto the filesystem: sudo mkdir /media/usb 3. Mount! sudo mount /dev/sdb1 /media/usb When you're done, just fire off: sudo umount /media/usb Source: StackOverflow

Karabiner: Mouse/keyboard customizer for OS X

For beginners, or the one who migrated from Windows environment, Natural Gestures (Scrolling and Swiping) might be bit confusing. But, once you get familiarized with them, it may feel like "What was I doing, all those days?". It all changed, when I connected external mouse to my Macbook. When you start using that WHEEL, you will be confused. Luckily there is a setting for mouse, to change scroll behavior (natural or the other way). But, here's the catch. If you toggle that setting, it also toggles the same for TRACKPAD!!!!! I've seen that many people were freaked out and even raised BUG report to Apple. But, all those reports were closed, saying that is not a bug, but intentional feature!!! For those, who can't leave with such one-sided settings, here is a simple util, which came to my rescue: Karabiner It's simple, powerful and stable mouse/keyboard customizer for OSX. Without going into much detail, here's the configuration I used to ret

Java: Use BigInteger in for-loop

In my previous post , I mentioned a way to handle large integers by using BigInteger. Now I'm going to provide a very important usage of it. We often use for-loop. So here is the way to use it: Ordinary integers: for(int i = 1; i <= n; i++) {  //Task to do } BigInteger: for (BigInteger bi = BigInteger.valueOf(1);                 bi.compareTo(n) <= 0;                 bi = bi.add(BigInteger.ONE)) { //Task to do } here n is a BigInteger variable.