The company I work for produces a content management system (CMS) with different various add-ons for publishing, e-commerce, online printing, etc. We are now in process of adding "reporting module" and I need to investigate which strategy should be followed. The "reporting module" is otherwise known as Business Intelligence, or BI.
The module is supposed to be able to track item downloads, executed searches and produce various reports out of it. Actually, it is not that important what kind of data is being churned as in the long term we might want to be able to push whatever we think is needed and get a report out of it.
Roughly speaking, we have two options.
Option 1 is to write a solution based on Apache Solr (specifically, using https://issues.apache.org/jira/browse/SOLR-236). Pros of this approach:
- free / open source / good quality
- we use Solr/Lucene elsewhere so we know the domain quite well
- total flexibility over what is being indexed as we could take incoming data (in XML format), push it through XSLT and feed it to Solr
- total flexibility of how to show search results. Similar to step above, we could have custom XSLT search template and show results back in any format we think is necessary
- our frontend developers are proficient in XSLT so fitting this mechanism for a different customer should be relatively easy
- Solr offers realtime / full text / faceted search which are absolutely necessary for us. A quick prototype (based on Solr, 1M records) was able to deliver search results in 55ms. Our estimated maximum of records is about 1bn of rows (this isn't a lot for typical BI app) and if worse comes to worse, we can always look at SolrCloud, etc.
- there are companies doing very similar things using Solr (Honeycomb Lexicon, for example)
Cons of this approach:
- SOLR-236 might or might not be stable, moreover, it's not yet clear when/if it will be released as a part of official release
- there would possibly be some stuff we'd have to write to get some BI-specific features working. This sounds a bit like reinventing the wheel
- the biggest problem is that we don't know what we might need in the future (such as integration with some piece of BI software, export to Excel, etc.)
Option 2 is to do an integration with some free or commercial piece of BI software. So far I have looked at Wabit and will have a look at QlikView, possibly others. Pros of this approach:
- no need to reinvent the wheel, software is (hopefully) tried and tested
- would save us time we could spend solving problems we specialize in
Cons:
- as we are a Java shop and our solution is cross-platform, we'd have to eliminate a lot of options which are in the market
- I am not sure how flexible BI software can be. It would take time to go through some BI offerings to see if they can do flexible indexing, real time / full text search, fully customizable results, etc.
- I was told that open source BI offers are not mature enough whereas commercial BIs (SAP, others) cost fortunes, their licenses start from tens of thousands of pounds/dollars. While I am not against commercial choice per se, it will add up to the overall price which can easily become just too big
- not sure how well BI is made to work with schema-less data
I am definitely not be the best candidate to find the most approprate integration option in the market (mainly because of absence of knowledge in BI area), however a decision needs to be done fast.
Has anybody been in a similar situation and could advise on which route to take, or even better - advise on possible pros/cons of the option #2? The biggest problem here is that I don't know what I don't know ;)