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

OS X 10.8 Mountain Lion bootable USB (without MAC)

Download the raw file from here . How to use: 1 - Copy the .raw file to an USB stick using  SUSE Studio Image Writer . If you have error during copy, eject and re-connect the pen drive. When Windows asks if you want to format it, cancel and run Image Writer again. If the problem persists, disable your anti-virus software, it may be blocking raw write to the drive. Another Image Writer for Windows, if SUSE doesn't work https://launchpad.net/win32-image-writer/+download 2 - Boot the USB drive and install. If you need, type  boot options , for example: -v (verbose boot) [default] -x (safe) -s (single user) GraphicsEnabler=yes (enable graphics card drivers) [default] USBBusFix=yes (fix problems with USB devices) npci=0x2000 (use if boot stops at "PCI configuration begin") cpus=1 If you need, use  TransMac  to remove kexts which are causing problems (System/Library/Extensions) and use the flag -f (ignore caches) at boot, or remove /System/Libra...

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.

JavaScript - Singleton Pattern

The singleton design pattern is probably the simplest and most common pattern in JavaScript. So why should you use the singleton pattern? Encapsulation of members & functions Creates its own Namespace A singleton is a single instance object Encourages code reuse Improves readability because you can logically organise your code The point of a singleton is to only have one instance. A shopping cart is a good example of something that you may want only a single instance of at one time. The simplest form of Singleton is an object literal. This loose form of Singleton cannot be instantiated. All of the members are now accessible through the Singleton variable, accessible through dot notation. var myCart = {     self: this ,     totalCost: 0,     totalQty: 0,     cart: {},     getCart: function (){ },     updateCart: function (){ } }; alert( "Total cost: ...