Posts

links for 2007-03-30

Implementing Data Cubes Efficiently How to choose which views to materialize in an OLAP cube, when it is too expensive to materialize all views. This is the next optimization for our aggregation strategies in ActiveWarehouse. (tags: olap database )

ActiveWarehouse Gets Some Love

ActiveWarehouse , the Ruby on Rails plugin for data warehouse development, was written up by InfoQ in their article ActiveWarehouse, a New Step for Enterprise Ruby . I've been writing different aggregation strategies for ActiveWarehouse, trying to find something that's not too slow or cumbersome. ActiveWarehouse supports pluggable aggregation, or rollup, strategies, so you can use what works best for you. We have some very large data sets and very large dimensions (one dimension we have has 215 million rows). So if ActiveWarehouse can eventually handle that, I think we're in good shape. I can say that ActiveWarehouse will work great if you have a smallish data set. I would say up to a million rows in your dimensions would be big enough. Of course, no matter how much work we put into optimizing ActiveWarehouse's aggregation schemes, smart database tuning will always help tremendously.

links for 2007-03-28

Pentaho Analysis Services: Aggregate Tables How Mondrian builds and utilizes aggregate tables to help query performance of large cubes. (tags: olap database ) On the Computation of Multidimensional Aggregates This paper presents fast algorithms for computing a collection of groupbys. (tags: olap database )

Creating Combinations of Sets/Arrays/Things in Ruby

I was looking for a way to create combinations of things in Ruby and I found an article by Uncle Bob detailing his attempt at writing a combination generator in Ruby. I modified it slightly to use an array of items, instead of simple indexes. require 'pp' def choose(n, k) return [[]] if n.nil? || n.empty? && k == 0 return [] if n.nil? || n.empty? && k > 0 return [[]] if n.size > 0 && k == 0 c2 = n.clone c2.pop new_element = n.clone.pop choose(c2, k) + append_all(choose(c2, k-1), new_element) end def append_all(lists, element) lists.map { |l| l << element } end all = [:a, :b, :c, :d] pp choose(all,3) The above code prints out: [[:a, :b, :c], [:a, :b, :d], [:a, :c, :d], [:b, :c, :d]] If you don't want these types of combinations, there is a Ruby library for calculating Permutations which will give you all the different permutations, or orderings, of a set of things.

Goodbye Productivity, Hello Desktop Tower Defense

I'm not usually one for online games or flash games. Heck, with a newborn in the house, I'm happy to sit and eat for five minutes. But having discovered Desktop Tower Defense , I can say that I've found a great fun little flash game. Inspired by Warcraft, this flash game has you deploying defensive towers to counter an onslaught of little gray circle guys. The more guys you kill, the more money you get and the more towers you can deploy or upgrade. Simple, fun, and you can shoot missles. Good times.

links for 2007-03-23

Dell Inspiron 6000 Service Manual my laptop has a burning smell coming from the back. not good. (tags: dell laptop )

Oracle 11g Gains Native OWL Support

Oracle 11g will gain native OWL support. From the article: > (2) Native OWL inferencing (for an OWL subset that includes property characteristics, class comparisons, proprety comparisons, individual comparions and class expressions) [New API] Way to go, Oracle! I've always had a soft spot for Oracle's RDF support. The way that you can blend RDF data sets and traditional relational data sets in the same query helps to deploy RDF slowly but surely. Not to mention that Oracle has already solved all the main problems that a RDBMS should solve (like ACID compliance, backup and recovery, strong security, wide developer toolset) makes Oracle's RDF support (and soon OWL) a strong contender for RDF data stores.