Excellent. As far as I tested, it works exactly as you described. Also
I did extra stress testing while auto-reload is enabled and there
wasn't too much performance overhead.

Fortunately the issue of having refresh() in between recommendation
requests is not a problem in my case. That's because in my servlet
recommend() is called once per HTTP request.



On Sun, Feb 26, 2012 at 12:39 AM, Lance Norskog <[email protected]> wrote:
> You got me interested :) Refreshable.refresh() is mostly done by a
> 'RefreshHelper' that does re-entrant locking on the operation, so if
> you call refresh() twice from multiple threads it only does it once.
> It then changes the DataModel pointer.
>
> If a recommender method does two successive calls to the datamodel,
> and refresh() changes the datamodel in the middle, the different calls
> will go against different datamodels. The Recommender object would
> have to implement its own synchronous controls across methods. I
> looked at a couple and they do not. Using a recommender across a
> refresh() is not part of the contract. You have to do your own
> synchronous controls.
>
> On Fri, Feb 24, 2012 at 11:46 PM, Sebastian Schelter <[email protected]> wrote:
>> This is not true. If you are in a servlet environment, the servlet
>> container will use the recommender in multiple threads which means the
>> app does not block while the recommender is refreshed.
>>
>> During the refresh process a new DataModel is built and the reference
>> to that is simply switched once it is fully loaded.
>>
>> --sebastian
>>
>> 2012/2/25 Lance Norskog <[email protected]>:
>>> You have to use two recommender objects if you want to serve
>>> recommendations while refreshing. I don't think any of the
>>> recommenders have that as part of the api contract.
>>>
>>> On Fri, Feb 24, 2012 at 8:31 AM, Aleksei Udatšnõi <[email protected]> 
>>> wrote:
>>>> Hi,
>>>>
>>>> I am using an item-based recommender inside a servlet and would like
>>>> to reload its data periodically (from db). Each reload takes up to 30
>>>> sec.
>>>>
>>>> Recommender object is Refreshable and thus can do periodic reloads by
>>>> using refresh() function. My only concern is the impact of reload on
>>>> the live servlet users.
>>>>
>>>> I wonder what happens with existing recommender.recommend() requests
>>>> while the recommender is being reloaded? Does it still use the old
>>>> data until reload is completely finished?
>>>>
>>>> Thanks
>>>> Aleksei
>>>
>>>
>>>
>>> --
>>> Lance Norskog
>>> [email protected]
>
>
>
> --
> Lance Norskog
> [email protected]

Reply via email to