On 4 mars 2013, at 17:39, Sanne Grinovero <sanne(a)hibernate.org> wrote:
On 4 March 2013 16:20, Emmanuel Bernard
<emmanuel(a)hibernate.org> wrote:
> I already gave what I knew on how to load an entity from a tuple (which
> isn't much) but we can try and dig together. Something I thought about
> is that ORM probably has a mechanism to load an entity from a resultset
> via the query parser. And that probably looks also like the second half
> of OgmLoader.load. We could look at this part and see if we can make an
> OGM version of it. We never had the need before as we never had query
> support (the way SQL does it).
I would also need to study the ORM code, but to add a high level observation,
the methods currently defined by the GridDialect are focusing on
loading from well known key instances,
there is nothing to makes us able to scan/inspect for all values.
In other words: even if we wanted to load keys first, we don't have definitions
of functions from raw->primary key instances either.
I understand that. I'm not denying the need for the method.
> On the visitor vs Iterator approach, I still don't see how implementing
> an Iterator on a map / reduce backend would be harder than the visitor
> but maybe I'm missing something.
>
> class IteratorAsStream {
> final Query someMapReduceQuery = ...;
>
> public Object next() {
> if (!someMapReduceQuery.started()) {
> // execute and collect results in parallel
> someMapReduceQuery.execute();
> }
> Object result = someMapReduce.getNextOrBlock();
> return result;
> }
> }
That could work to *load* all entities in parallel, but I'd like to
process the entities in parallel as well.
And I'd rather not force the GridDialect implementors to write some
Hibernate Search specific code,
so to break out we need some form of "Execute X on each": a closure or a
lambda.
I can't see how the visitor model helps in your processing of entities in parallel. To
me both approaches are strictly equivalent. Care to show some pseudo-code?