Cached and Uncached Components

This topic applies to Enterprise Edition only. If you have not installed Enterprise Edition you will not be able to use the features discussed.


When working with Enterprise Edition we will normally want to save our work in a project by saving the project to a .map file in the usual way. Enterprise Edition has two modes in which shared components can be saved when a project is saved to a .map file. Shared components can be cached or uncached for the purpose of saving projects.


§      Cached components - When a component is marked Cached the Enterprise cache for that component will be written into the .map project file when the project is saved. This will grow the .map file by the size of the cached component.

§      Uncached components - When a component is not marked Cached the Enterprise cache for that component will not be written into the .map file. Instead, only a link to the shared component on the Enterprise server for that component will be saved.


Shared components are cached by default. We can designate a component to be uncached by right clicking on a shared component in the project pane and choosing Cached from the pop-up context menu to toggle the check mark next to the Cached entry. Tool tips and the project pane status bar will show the cached/uncached status of each shared component.


The word "cache" is a computer term that refers to use of local memory that may be rapidly accessed. When Manifold first links a shared component into a project from an Enterprise server it fetches the component from the server into an Enterprise cache maintained in local memory, both in RAM and in temp files on local disk. The Enterprise cache always contains a snapshot of all components with which we are working whether they are shared or local. The Enterprise cache allows operations in local memory whenever possible to greatly reduce transactions with the Enterprise server. This increases speed because it greatly reduces the interactions between the client and the server, so our desktop (the client) is not slowed down by bottlenecks at the server.


When we save a project, Manifold checks the Cached status of each shared component in the project. If the Cached setting is checked, the Enterprise cache for that component will be saved into the .map project file that is created when the project is saved. As a practical matter, saving the Enterprise cache into the project for a component is equivalent to saving a controlled copy of the component into the project's .map file. Doing so will grow the .map file by the size of the component.


If the shared component is uncached, that is, the Cached setting is not checked, then the project's .map file will contain only a link back to the remote component on the Enterprise server. Saving a project that contains uncached, shared components saves no data from shared component within the project's .map file, so it will not grow the size of the .map file by the size of the component.


In both cases, regardless of whether a shared component is cached or uncached, the Enterprise status of the shared component will be preserved when the project is next opened. For example, suppose we create a new project, link into it several shared components, check out one of those components and save the project. We could close Manifold, go away for lunch, come back later and open the project and the component will still be checked out. This will be true whether or not the components were cached or uncached.


Advantages and Disadvantages


Some readers may wonder: If checking the Cached setting for a shared component causes a copy of it to be saved within the .map file, doesn't that defeat the purpose of an Enterprise server? That is only so if one imagines the purpose of an Enterprise server to be limited to saving disk space. In an era of essentially free disk storage capacity (due to the very large sizes of modern disk drives and their very low costs), the greatest benefit of centralized storage on an Enterprise server is not saving disk space, it is making work more efficient by allowing collaborative efforts within teams and by providing centralized archives and version control.


Caching components and saving them to project files does not interfere in any way with the component discipline implied by Enterprise Edition's sharing, check out and check in procedures. The client side of Enterprise Edition will enforce all dependencies just as if components were not cached. Caching allows faster client startup, more efficient server operation and greater operational flexibility and safety.


Caching allows greater performance when a project is opened because the constituents of that project need not be fetched from the Enterprise server. When a project consists of large components the time required for decompressing and fetching a component from the Enterprise server could be a long time even if no one else is trying to fetch components from the server at the same time. Caching components reduces the need to interact with the Enterprise server to only those times when components are changed.


Advantages of Cached Components


§      Reduces load on the Enterprise server, allowing the same system to serve more users.

§      Faster opening of projects when the Enterprise server is loaded by other user requests at the same time, such as at the beginning of a business day when many users at once may launch projects that fetch data from an Enterprise server.

§      Work can continue on projects when the Enterprise server is inaccessible. For example, one could begin a project on a notebook computer connected to a local area network, save the project and then continue working with the project while travelling on an airplane.

§      Reduced latency allows working with larger projects if the Enterprise server is accessed over an Intranet or the Internet.

§      Automatic redundancy safeguards important data. If the Enterprise server crashes we will not lose any data if a project has been saved with cached components.

§      Professional Edition can transparently handle cached shared components, so it can open a saved Enterprise project if it includes only local and cached shared components. This allows easy data and project interchange between a work group that includes both Enterprise and Professional users.

§      Data exchange becomes simpler, because one can send a .map file that contains cached components to another user. Even if the Enterprise server cannot be contacted at least the components will be available in their last-saved state.

§      Projects using cached components can be saved with cached components in a checked out state. This allows checking out a component, performing some edits and then setting the work aside in a saved project to be finished at a later time.


Disadvantages of Cached Components


§      Cached components require more disk space when projects are saved, because each saved project contains the Enterprise cache image of the cached shared component.

§      When a project is opened users must get the latest version of components that have been changed by other users since the project was last opened.


Advantages of Uncached Components


§      Opening a project automatically gets the latest version of all uncached components. Because uncached components are fetched in their entirety every time a project is opened they are automatically up to date.

§      If many common files are in use throughout an organization, not caching components will assure that only one copy's worth of disk space is used for a shared component throughout an organization: the space required on the Enterprise server for that component.


Disadvantages of Uncached Components


§      Uncached components exist in only one location: the Enterprise server. If a connection to the server cannot be established or if the server crashes the components will be deleted from the project. It is therefore essential to establish and maintain a backup regime to backup the database on a regular basis. However, setting up automatic backup of databases is often a chore neglected by the experienced administrator and beyond the skill set of a novice.

§      Delays caused during "rush hour" in the morning or at the end of a work day can lead to user complaints, since few organizations scale their hardware to provide acceptable performance during peak loads. Because disk space is a lot cheaper than system throughput it is far cheaper and easier to deploy slightly larger hard disks for user desktops than it is to scale a central server to handle huge loads that appear for only a fraction of the work day.

§      Professional Edition users cannot use projects containing uncached components.

§      The need to fetch uncached components every time the project is open will limit the size of projects that are practical to share via Internet.

§      Data exchange becomes more complicated because it is generally not possible to simply exchange .map files, since the connection strings to the Enterprise server will not likely be the same for a different user. If we send a .map file containing shared components to someone else they will not be able to see or use the shared components unless they are able to use exactly the same connection string to connect to the data source for that Enterprise server. This is highly unlikely unless both users are working on the same machine.

§      Projects containing uncached components cannot be saved if any of the uncached components is checked out. This means that all desired edits must be accomplished and the component checked in before the project is saved.


From the points above it can be seen that the main benefit of using uncached components is a reduction in disk space used when the same component appears in many projects. For a single user working with many projects this can be a worthwhile savings, since a single user will be working with only one project at a time.


However, if the objective is to reduce disk space because many users have included the same shared component in their projects the tradeoff is not so simple. In this case, the reduction in disk storage comes at the cost of a dramatic increase in transactions with the Enterprise server when many users open their projects and thus a greatly increased peak-processing requirement during busy times of the day.


If components are uncached, one must invest in a reliable, fast machine to host the Enterprise server. It must be reliable because if it fails our data disappears. It must be fast because multiple user demands will be more likely when every time a project is opened every uncached component must be loaded from the server.


In contrast, if we are willing to take advantage of large, cheap hard disks and use cached components we can use a relatively inexpensive machine for our Enterprise server that need not be particularly fast. User accesses to the Enterprise server will rarely happen simultaneously because components will be read or written only when they are changed. The great majority of projects will load shared components only when they are first created. Thereafter, user load will be negligible since the server is consulted only in brief contacts to check the status of components. On occasion when a component is changed there will be some activity as a new version of a component is checked in and other users get the latest version.


Of course, one can use a mix of cached and uncached components in a project to balance the advantages and disadvantages of caching in a particular project.


Default Settings


In Tools - Options - Server Storage the Cache newly shared components option specifies whether newly shared components will be cached or uncached. By default, this option is checked so that newly shared components are cached. If this option is not checked, newly shared components will be uncached.




When working with uncached components Manifold will load the uncached components when a project is opened; however, it also most load the uncached component from the Enterprise server once more after saving a project. Both operations are internal and are transparent to the user except for the time required to fetch an uncached component from the Enterprise server. Users will normally expect a delay while components are fetched from the Enterprise server when a project is opened; however, a similar delay when saving a project may come as a surprise. However, the re-load of cached components upon a project save is required to maintain cache synchronization.


See Also


Working with Enterprise Edition

Administering Enterprise Servers