On Wed 2014-03-05 17:16, Mircea Markus wrote:
> Sanne came with a good follow up to this email, just some small 
> clarifications:
> 
> On Mar 4, 2014, at 6:02 PM, Emmanuel Bernard <emman...@hibernate.org> wrote:
> 
> >>> If you have to do a map reduce for tasks so simple as age > 18, I think 
> >>> you system better have to be prepared to run gazillions of M/R jobs.
> >> 
> >> I want to run a simple M/R job in the evening to determine who turns 18 
> >> tomorrow, to congratulate them. Once a day, not gazzilions of times, and I 
> >> don't need to index the age filed just for that. Also when it comes to 
> >> Map/Reduce, the drawback of holding all the data in a single cache is 
> >> two-folded:
> >> - performance: you iterate over the data that is not related to your 
> >> query. 
> > 
> > If the data are never related (query wise), then we are in the database 
> > split category. Which is fine. But if some of your queries are related, 
> > what do you do? Deny the user the ability to do them?
> 
> Here's where cross-site query would have been used. As Sanne suggested (next 
> post) these limitations overcome the advantages.

No. Cross-cache query if implemented will not support (efficiently
enough) that kind of query. Cf my wiki page.

> 
> > 
> >> - programming model: the Map/Reduce implementation has a dependency on 
> >> both Dog and Person. If I add Cats to the cache, I'll need to update the 
> >> M/R code to be aware of that as well. Same if I rename/remove Dog. Not 
> >> nice.
> > 
> > Well it’s called type safety, some people find it good ;)
> 
> If anything, this model reduces type safety and reusability. E.g. say you 
> want a M/R task to see how many Persons speak French. With the single cache 
> model(both Dog and Person int he Cache<String, Mammal>) it would look 
> something like:
> 
> a)
> //pseudocode
> map (String k, Mammal value) {  
>   if (value instanceof Person)) { //this is the ugly part
>       if  (((Person)value).speaks("French")) ...
>   } else {
>      //ignore it, it's an Dog
>   }
> }
> 
> Same thing written for a Cache<String, Person>:
> 
> b)
> map (String k, Person value) {
>    if  (value.speaks("French")) ...
> }
> 
> I don't think people would prefer writing a) instead of b) ;)

I concede that point. I would actually have stored
Person {
    name: emmanuel
    dogs: [
        Dog { name:django }
    ]
}
in the cache making it essentially a Cache<UUID,Person>.
I would not have two caches Cache<UUID,Person>, Cache<UUID,Dog> though
because it would prevent me from doing efficient data correlations
between Persons and Dogs.
_______________________________________________
infinispan-dev mailing list
infinispan-dev@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/infinispan-dev

Reply via email to