BLOB caching (promiňte ten patvar, ale počeštěné “kešing” nebo “kešování” nebo “využití mezipaměti” mi nějak nesedí) je v souvislosti s SharePoint platformou velmi málo známá věc. Provozujete-li SharePoint ve scénáři serverové farmy (myslím opravdovou serverovou farmu s front-end aplikačními a back-end databázovými servery, ne tedy v tom smyslu, ve kterém toto označení používá Microsoft pro jakékoliv instalace, kdy SharePoint nevyužívá integrovaný DB stroj), pak čtěte pozorně.

Trocha teorie na úvod

BLOB je zkratkou z “Binary Large Object”. BLOB je datový typ pro ukládání binárních dat do databází, jedná se typicky o AV soubory, dokumenty apod. Vřele doporučuji k přečtení studii z Microsoft Research “To BLOB or Not To BLOB: Large Object Storage in a Database or a Filesystem?”, která je ke stažení zde. Ze studie vyplývá, že binární objekty větší než 1 MB je výhodnější ukládat na FS (díky bohu za FILESTREAM v SQL Serveru 2008), objekty menší než 256 KB je naopak výhodnější ukládat do databáze. Mezi tím je tak trochu mlhavý prostor a v něm silně záleží na druhu aplikace. Pokud se data často přepisují, tak je lepší spíše FS (lépe se vyrovnává s fragmentací), pokud se data nepřepisují, tak je lepší DB.

Co myslíte, že je rychlejší? Tahat binární soubory z DB back-end serverů, nebo si je “nakešovat” (hm, tady se tomu počeštěnému tvaru holt nevyhnu) na FS front-end serveru a klientům je poskytovat odtud? :-)

Říkáte-li si “Pche, použiju radši FILESTREAM.”, tak ano, klidně, máte-li SQL Server 2008, skvělá volba. BLOB caching však mohou všichni využít hned a jak uvidíme, skutečně velmi jednoduše.

Takže jak na to?

V souboru web.config dané SharePoint webové aplikace vyhledejte tento řádek:
<BlobCache location="C:\blobCache" path="\.(gif|jpg|png|css|js)$" maxSize="10" enabled="false"/>
a hodnotu jeho parametru enabled změňte na true.

Parametr maxSize="10" určuje velikost cache a pozor, hodnota je v GB! Zbytek je asi jasný, cesta, typy souborů... Doplnit můžete ještě parametr max-age, např. s hodnotou 43200 (udává se v sekundách, zde tedy nastavení pro 12 hodin – max-age=”43200”), kterou určíte hodnotu max. stáří souborů. Po editaci a uložení souboru web.config není třeba ani reset IIS, vše hned funguje, soubory se v cache ukládají hezky do stromové struktury kopírující topologii vašeho portálu s velmi originální příponou “cache”. :-)

Kdy se to může pokazit?

Máte-li SharePoint s jedním front-endem, pak nikdy. Cache bude jedna a chová se tak, jak má. Dojde-li ke změně souboru uloženého na SharePointu, změní se i cache. Provozujete-li však v rámci SharePoint farmy více front-endů, tak každý z nich bude mít svou vlastní cache. Někdy je tedy nutné cache resetovat a to na všech front-end serverech najednou. Jak na to?

S pomocí této adresy http://mojewebapplikace:mujport/_layouts/objectcachesettings.aspx (samozřejmě si to upravte dle vašeho nastavení) zobrazte stránku “Object cache settings” a ejhle – volbou “Force all servers in the farm to flush their object caches” docílíte požadovaného stavu, kdy na všech front-end serverech v rámci farmy dojde k vyprázdnění obsahu cache. Pokud tuto volbu na stránce “Object cache settings” nevidíte, tak buď nainstalujte SP2 ( :-) ), nebo použijte tento bezplatný doplněk: MOSS 2007 Farm-Wide BLOB Cache Flushing Solution.

Další doporučené odkazy

Configure disk-based cache settings
How to automatically reset/clear the Blob Cache/Disk Cache

- Kamil Juřík (MVP)