Mondrian ships with an in memory segment cache that is great for standalone deployments of Mondrian, but doesn't scale out with multiple nodes. An interface is provided for extending Mondrian with a shared Segment Cache and examples of other implementations are in the links below.
In order to use Mondrian with Redis (our preferred caching layer) and Ruby (our preferred language -- Jruby) we had to implement the SegmentCache interface from Mondrian and use the Redis notifications api.
http://stackoverflow.com/questions/17533594/implementing-a-mondrian-shared-segmentcache http://mondrian.pentaho.com/api/mondrian/spi/SegmentCache.html https://github.com/pentaho/mondrian/blob/master/src/main/mondrian/rolap/cache/MemorySegmentCache.java https://github.com/webdetails/cdc
Add this line to your application's Gemfile:
gem 'mondrian_redis_segment_cache'
And then execute:
$ bundle
Or install it yourself as:
$ gem install mondrian_redis_segment_cache
If using Rails you can put the configuration in an initializer
require 'redis'
require 'mondrian_redis_segment_cache'
# Setup a Redis connection
MONDRIAN_REDIS_CONNECTION = Redis.new(:url => "redis://localhost:1234/2")
MONDRIAN_SEGMENT_CACHE = ::MondrianRedisSegmentCache::Cache.new(MONDRIAN_REDIS_CONNECTION)
# Register the segment cache with the Mondrian Injector
::Java::MondrianSpi::SegmentCache::SegmentCacheInjector::add_cache(MONDRIAN_SEGMENT_CACHE)
Cache expiry is handled by the options :ttl
and :expires_at
If you want a static ttl (time to live) then each key that is inserted will be set to expire after the ttl completes. This is not always optimal for an analytics cache and you may want all keys to expire at the same time (potentially on a daily basis).
If you want all keys to expire at the same time you should use :expires_at
in the options hash. This should either be the hour
that you want all keys to expire on, or a Time
object with a custom time. If you use :expires_at
as an hour of expiration then
1 is 1am, 2 is 2am, 15 is 3pm and so on.
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request