Showing posts from 2013

It's the little things - pre-emptive alarm dismissal

Sometimes the little interactions are important. I recently ran a test build of Android 4.4 on my phone and discovered a new feature. This feature is the ability to pre-emptively "dismiss" a scheduled alarm. Prior to this feature I would need to turn the alarm off, wait for the alarm time to pass and then turn the alarm back on.

Now this is an infrequent case, when for example I wake up a few minutes before my alarm is set to go and I don't want it to just go off for 5 minutes while I am in the shower. I have to switch it off and then remember to turn it back on. If I forget then the cost is reasonably high, I could miss my alarm the next day.

Now repeating alarms have been on phones for many years and I have relied on my phone alarms since 2006, but it has taken 7 years for someone to come up with such a simple and useful interaction.

I love it when something that has been "done to death" can suddenly have a new improvement that makes the feature just a little…

Intersystems Caché Performance - Part 3

While my investigations have still left me sad to find that there is no real way to match the read performance of an SQL database I have found out some interesting little pieces of information on Caché.

1. Bitmap indexes always appear to be faster than standard indexes no matter how many unique values there are.

2. Traversing standard indexes manually is the fastest way to return a query first time (second time bitmap index SQL is the fastest).

3. Single Insert performance is good

4. Reversing through an on disk array (e.g. $ORDER(^global,-1) ) is slower than going through it forwards putting the data into an in memory array and then reserving through it! To my surprise all my tests showed that it was at least a 50% performance improvement and as the data grows it can double. The only problem is if the memory array grows too big then you will get a store error as the memory runs out.

I am considering re-writing my queries to only reverse $ORDER in memory and checking the $STORAGE to make s…

Intersystems Caché performance testing part 2

Time For Write Performance to Shine?
Having struggled to achieve good read query performance I thought I would give the write performance a try.

Caché has suggested that its write performance is its real strength and so I thought I would have a quick comparison. I used the same simple table with 10,000,000 records. It only has a first and lastname value, I inserted 10,000 rows 3 times in each and took the average performance figure.

A Win for Caché?
I tried both SQL INSERT and creating objects using %Save() to see which was faster. I found SQL INSERT to be about 15% faster than using objects, so the figures below are from SQL INSERTS.

Caché 10,000 inserts 0.42 seconds, this went down to 0.38 on subsequent tests
MySQL 10,000 inserts 0.152 seconds. 
MSSQL 10,000 inserts 0.502 seconds.

Finally Caché performing well. What is an additional bonus is that Caché has good performance with sequential inserts which are significantly slower in MySQL.

Overall the write performance is not exactly astonishin…

Intersystems Caché performance, woe is me...

I admit I am no Intersystems Caché guru, I am looking at 3 years working with the software. I have attended the sparse available training and I have been left to explore this weird universe known as Caché.

Now if you read their website you will read the tag line "the World's fastest, most scalable Object oriented database". More over they make even greater claims of " can run SQL faster than relational databases. "

Every training session seemed to pad every sentence with "so fast" and "world's fastest" although I was never sure if they were trying to convince me or themselves of this "fact".

When using SQL databases for reporting data I have never really encountered issues, my SQL has normally been suboptimal fire and forget code, I make the query get the data and if the full page response including the query is less than 1 second it is not worth optimising.

Now while 99% of my MSSQL and MySQL queries have always been so quick…