What **design patterns** or **techniques** have you used that are specifically geared toward **scalability**? 

Patterns such as the [**Flyweight**](http://www.dofactory.com/Patterns/PatternFlyweight.aspx) pattern seem to me to be a specialized version of the [**Factory Pattern**](http://msdn.microsoft.com/en-us/library/ms954600.aspx), to promote high scalability or when working within memory or storage constraints.

What others have you used? ([**Denormalization of Databases**](http://database-programmer.blogspot.com/2008/04/denormalization-patterns.html), etc.) Do you find that the rules change when high availability or scalability is your primary goal? 

Possible situations are:

* Mobile devices with more limited memory, processing power, and connectivity than a Desktop or Laptop
* High # of users on limited hardware (caching strategies, etc)
* Optimization of database schema for efficiency in lieu of a normalized design (e.g. SharePoint column wrapping for storage)