punkave/apostrophe-query-cache

Name: apostrophe-query-cache

Owner: P'unk Avenue

Description: Simple mongodb query caching solution for Apostrophe sites that become database-bound.

Created: 2015-02-11 01:12:40.0

Updated: 2017-07-28 16:07:08.0

Pushed: 2015-02-11 01:13:00.0

Homepage: null

Size: 104

Language: JavaScript

GitHub Committers

UserMost Recent Commit# Commits

Other Committers

UserEmailMost Recent Commit# Commits

README

apostrophe-query-cache

This experimental module adds a simple MongoDB query cache to an Apostrophe site. The cache is applied to all calls to apos.get, which means it impacts just about all content displayed by Apostrophe.

The entire cache is invalided by any call to any method of the pages collection that makes a modification. This makes the cache reasonably safe, provided that you do not use it on multicore or multi-server sites.

This cache makes sense only if your site has become database-bound, spending most of its time waiting for MongoDB rather than doing work of its own.

Installation

npm install –save apostrophe-query-cache

Configuration
strophe-query-cache': {}
Memory management

Since there is no active management of how much memory the cache is using, it is automatically invalidated every 60 seconds. In most cases this is enough to keep memory usage reasonable. It is also a very crude solution; some sort of Least Recently Used strategy would be much nicer.

Overrides

You can subclass this module at the project level to change the rules for invalidating the cache. The default is that any write to the pages collection will invalidate the cache. You can change this by overriding the invalidate method, which receives the method name called (such as update), and an array containing the arguments to that method. Return true to invalidate the cache, false to leave it alone.

This example ignores any update calls that increment something with $inc. We found this handy on a site that incremented a page access counter on every view but didn't need to show that information instantly to the public.

le.exports = cache;

tion cache(options, callback) {
turn new cache.Construct(options, callback);


e.Construct = function(options, callback) {

r self = this;

dule.exports.Super.call(self, options, null);

lf.invalidate = function(method, args) {
if (method === 'update') {
  var action = args[1];
  if (action && action.$inc) {
    return false;
  }
}
return true;


turn process.nextTick(callback);

Stability and Compatibility

This module is compatible with Apostrophe 0.4 and 0.5. It is currently experimental but we are using it in production.


This work is supported by the National Institutes of Health's National Center for Advancing Translational Sciences, Grant Number U24TR002306. This work is solely the responsibility of the creators and does not necessarily represent the official views of the National Institutes of Health.