Mozilla Revenue Chart

Revenue Chart

Year & Source
2003 – http://blog.lizardwrangler.com/2007/01/02/the-mozilla-foundation-achievi…
2004 – http://blog.lizardwrangler.com/2007/01/02/the-mozilla-foundation-achievi…
2005 – http://blog.lizardwrangler.com/2007/01/02/the-mozilla-foundation-achievi…
2006 – http://www.mozilla.org/foundation/documents/mf-2006-audited-financial-st…
2007 – http://www.mozilla.org/foundation/documents/mf-2007-audited-financial-st…
2008 – http://www.mozilla.org/foundation/documents/mf-2008-audited-financial-st…
2009 – http://www.mozilla.org/foundation/annualreport/2009/faq.html
2010 – http://www.mozilla.org/en-US/foundation/annualreport/2010/faq/

Row vs Column oriented databases

A database program must show its data as two-dimensional tables, of columns and rows, but store it as one-dimensional strings. For example, a database might have this table.

EmpId Lastname Firstname Salary
1 Smith Joe 40000
2 Jones Mary 50000
3 Johnson Cathy 44000

This simple table includes an employee identifier (EmpId), name fields (Lastname and Firstname) and a salary (Salary).

This table exists in the computer’s memory (RAM) and storage (hard drive). Although RAM and hard drives differ mechanically, the computer’s operating system abstracts them. Still, the database must coax its two-dimensional table into a one-dimensional series of bytes, for the operating system to write to either the RAM, or hard drive, or both.

A row-oriented database serializes all of the values in a row together, then the values in the next row, and so on.

1,Smith,Joe,40000;2,Jones,Mary,50000;3,Johnson,Cathy,44000;

A column-oriented database serializes all of the values of a column together, then the values of the next column, and so on.

1,2,3;Smith,Jones,Johnson;Joe,Mary,Cathy;40000,50000,44000;

This is a simplification. Partitioning, indexing, caching, views, OLAP cubes, and transactional systems such as write ahead logging or multiversion concurrency control all dramatically affect the physical organization. That said, online transaction processing (OLTP)-focused RDBMS systems are more row-oriented, while online analytical processing (OLAP)-focused systems are a balance of row-oriented and column-oriented.

Simple Consistent Hash for Memcache in Ruby

Consistent hashing is a scheme that provides hash table functionality in a way that the addition or removal of one slot does not significantly change the mapping of keys to slots. In contrast, in most traditional hash tables, a change in the number of array slots causes nearly all keys to be remapped. By using consistent hashing, only K/n keys need to be remapped on average, where K is the number of keys, and n is the number of slots.