Forum OpenACS Development: cr_folder_type_map bloat

Posted by Gustaf Neumann on
This is a posting containing a warning about a bloat in the cr_folder_type_map bloat for large sites (e.g. based on DotLRN.)

The file-storage has the bad property to register essentially all objects types under cr_revisions for every folder created. On our production site, it registers for every newly created folder currently 60+ cr-types in the cr_folder_type_map, although just three content types are necessary (content_folder, content_extlink, and file_storage_object). In practice, this means that we have more than 40 mio entries in our cr_folder_type_map, where most of these are from the file-storage package.

production=# select count(*) from cr_folder_type_map ;
(1 row) 
On another large site i checked, i found more than 90 Mio (!) entries, where most of these are useless.

I've added a upgrade script [1] which fixes this bloat. However, note that on large sites, this will run a very long time. So, site-admis might choose to upgrade via apm-package manager, skip the upgrade script, and do the upgrade in smaller steps. Unfortunately, there is no easy and quick way to select all folders from the file-storage due sins of the past, so i had to go over the tree_sortkey.

For smaller sites, the performance is fine (just run this on in a fraction of a second). Large site should probably create a temporary table with all file-storage folders (part up the upgrade script) and delete the superfluous entries based on chunks from this table. Unfortunately, fs_folders() returns not only folders from the file-storage. Maybe, someone finds a way to speed this up.

best regards