[ 
https://issues.apache.org/jira/browse/OAK-3090?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14622214#comment-14622214
 ] 

Chetan Mehrotra commented on OAK-3090:
--------------------------------------

Given we already use Guava in Oak it might be better to just make use of them 
(or LIRSCache if it supports removal listener) and have a simple 
CachingDataStore impl. Have a look at {{DataStoreBlobStore#getInputStream}} 
where we have some caching done for small binaries on heap. 

Extrapolating that design in following way would allow us to implement a simple 
FS based caching layer
# Have a new cache where the cached value is File (or some instance which keeps 
a reference to File)
# Provide support for Weight via a simple 
[Weigher|http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/cache/Weigher.html]
 which is based on File size
# Register a 
[RemovalListener|http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/cache/RemovalListener.html]
 which removes the file from file system upon eviction
# Provide a 
[CacheLoader|http://docs.guava-libraries.googlecode.com/git-history/release/javadoc/com/google/common/cache/CacheLoader.html]
 which spools the remote binary to local filesystem

This should be a small logic and would provide you all benefits of Guava cache 
including cache stats. And this would transparently work for any DataStore. 

May be we implement it at {{BlobStore}} level itself and then it would be 
useful for other BlobStore also. Doing it at BlobStore level would require some 
support from {{BlobStore}} to determine the blob length from blobId itself. 

[1] https://code.google.com/p/guava-libraries/wiki/CachesExplained

> Caching BlobStore implementation 
> ---------------------------------
>
>                 Key: OAK-3090
>                 URL: https://issues.apache.org/jira/browse/OAK-3090
>             Project: Jackrabbit Oak
>          Issue Type: New Feature
>          Components: blob
>            Reporter: Chetan Mehrotra
>             Fix For: 1.3.4
>
>
> Storing binaries in Mongo puts lots of pressure on the MongoDB for reads. To 
> reduce the read load it would be useful to have a filesystem based cache of 
> frequently used binaries. 
> This would be similar to CachingFDS (OAK-3005) but would be implemented on 
> top of BlobStore API. 
> Requirements
> * Specify the max binary size which can be cached on file system
> * Limit the size of all binary content present in the cache



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to