1. A method comprising: storing a plurality of backend data elements in one or more backend data sources in at least one persistent storage device; storing a plurality of mid-tier databases at a plurality of computing devices of a caching grid, each computing device of the plurality of computing devices comprising a self-contained database server that: processes database commands, does not share one or more resources with other mid-tier database servers of other computing devices of the plurality of computing devices, and maintains transactional consistency with respect to one or more mid-tier databases stored at said each computing device; maintaining, in the plurality of mid-tier databases, a plurality of shared cache instances that each correspond to a backend data element selected from the plurality of backend data elements stored in the one or more backend data sources; ensuring that for a particular backend data element, the plurality of mid-tier databases does not store, at any given time, more than one shared cache instance for the particular backend data element; providing a first application access to a first mid-tier database at a first computing device; receiving, at the first computing device, a database command from the first application that modifies a first cache instance of a first backend element; in response to the database command from the first application, moving the first cache instance from a second mid-tier database at a second computing device to the first mid-tier database, wherein the first cache instance is removed from the second mid-tier database; after moving the first cache instance, accessing the first cache instance, by the first application, at the first computing device using one or more database commands; wherein the method is performed by one or more computing devices.