1. A method for hosting, at a provider, a plurality of tenants over a network, the method comprising: storing, at the provider, a shared data structure having shared data; storing, at a first tenant of the plurality of tenants, a tenant-specific data structure that is specific to the first tenant for access by the first tenant; receiving, at a middleware module, a data request from the first tenant; and retrieving, in response to the request, the shared data structure from the provider when the request is for the shared data and the tenant-specific data structure from a tenant server of the first tenant when the request is for the tenant-specific data structure.