Hi folks

I have a caching/router based question.

I need to cache a site with a large number of pages (think 20 million+). These 
pages are generated by a Python application with a fair amount of database 
calls, data crunching and template rendering, hence the need to cache the 
responses.

First I looked into uWSGI's Cache2 setup, which is awesome but "only" memory 
based. With a potential of 20 million pages at ~30 Kb each ... well I do not 
have that kind of memory :)

File based caching it is. As far as I could find in the docs Cache2 does not 
support dumping responses into files, only into memory (tell me if I'm wrong 
here...). The only way to accomplish file based caching is through the router 
and the "transformation_tofile" plugin as demonstrated in the caching cookbook.

I have tested this and it works very well. Not as fast as memory based caching, 
but still a considerable speed boost.

Here comes the crux: If more than 20 million files could potentially be dumped 
into a single cache directory on disk this could wreak havoc on filesystem read 
times in that specific directory.

So here is what I try to do: I would like to create subdirectories inside the 
main cache directory based on the URL path. Each path in the application points 
to a different type of page so I'm looking at the following cache setup:

- If the path is: "/path-a/some-title/" the cache on disk 
"/main-cache-dir/path-a/some-title/file.html

In essence this is no problem and can be achieved by the following router rule:

route-if = isfile:/disk1/uwsgi_cache/files${PATH_INFO}file.html 
static:/disk1/uwsgi_cache/files${PATH_INFO}file.html

However, uWSGI needs to create this subdirectory structure (and the arbitrary 
named "file.html" file) first. I know uWSGI can do this with the "exec-asap" 
directive:

exec-asap = mkdir -p <some-path>

Yet "exec-asap" is not part of the router setup and does not fire during 
routing nor does it carry the needed routing variables (such as ${PATH_INFO}).

Does this sound like a scenario for uWSGI "flat file" caching ... can it cache 
to subdirectories instead of flat all in one?
Is it possible to create directories (and their parents) from within the router?

Cheers,
Tim

_______________________________________________
uWSGI mailing list
[email protected]
http://lists.unbit.it/cgi-bin/mailman/listinfo/uwsgi

Reply via email to