Hi all

As Alfonso mentioned the Ignite backend could implement the 3-union fields
either by using joined tables or storing serialized objects as binary. Here
some comments on those approaches.

Using joined tables would definitely has an impact in performance due the
fact distributed joins [1] imply some subquery/aggregation overhead.
Moreover, the efficiency and results of such joins will depend on the
specific configuration used into the Ignite Cluster. On the other hand,
from a developing point of view, explicitly referencing persistent entities
within class mapping (JPA - like ) will introduce some complexity to the
project (fetching strategies, relations  handling, etc.) and as far I
understand Apache Gore was not conceived in that way.

Serializing objects on the other hand sticks to other backends
implementation as I noticed while analyzing Gora code. It seems to keep
code simple and IO operations efficient due the fact that embedded
persistent entities are stored as simple literals into the data stores. In
addition, Ignite has the data type BINARY [2] which suits the needs of such
fields.

In a nutshell, I suggest taking the serialization approach and adapting
other backends implementation of 3-union fields in the Ignite backend. But
I am not really an expert on the subject so please feel free to give your
feedback.


[1] https://apacheignite-sql.readme.io/docs/distributed-joins
[2] https://apacheignite-sql.readme.io/docs/data-types#section-binary


2018-06-06 5:05 GMT-05:00 Alfonso Nishikawa <[email protected]>:

> Hi, Carlos.
>
> About the mapping files and the fields 'boss' and 'webpage', yes, they
> reference two other Persistent entities. You can see the schema of Employee
> [1], were it has a boss (referencing itself) and a webpage (with the
> WebPage schema defined there).
>
> How to handle this depends on the actual backend. In HBase we serialize
> with avro each of the fields that are Persistent entities as shown at [2]
> (we get there from [3] > [4] > [5], but this is for HBase).
> On the other hand, if I am not worng, MongoDB Store has no problem with
> hierarchical data, so it just writes it as it is.
>
> In your case, it depends on the features of your backend and what approach
> wold be better overall. I am seeing that Ignite has SQL + key/value
> properties... how interesting :)
> I know nothing about, but I would think about  the performance costs of
> joined tables, the possibility of mapping each persistent into a table, or
> the approach like HBase serializing (as a key/value store). Or maybe Ignite
> has some functionality for complex data.
> Just thinking about it without knowing.
>
> If I left things unclear don't doubt to ask :)
>
> Regards,
>
> Alfonso
>
>
> [1]
> https://github.com/apache/gora/blob/apache-gora-0.8/
> gora-core/src/examples/avro/employee.json
> [2]
> https://github.com/apache/gora/blob/apache-gora-0.8/
> gora-hbase/src/main/java/org/apache/gora/hbase/util/
> HBaseByteInterface.java#L233
> [3]
> https://github.com/apache/gora/blob/apache-gora-0.8/
> gora-hbase/src/main/java/org/apache/gora/hbase/store/HBaseStore.java#L240
> [4]
> https://github.com/apache/gora/blob/apache-gora-0.8/
> gora-hbase/src/main/java/org/apache/gora/hbase/store/HBaseStore.java#L262
> [5]
> https://github.com/apache/gora/blob/apache-gora-0.8/
> gora-hbase/src/main/java/org/apache/gora/hbase/store/HBaseStore.java#L331
>
>
> 2018-06-06 4:38 GMT-01:00 carlos muñoz <[email protected]>:
>
> > Hi all,
> >
> > Currently I am working on the Ignite backend, I am using my own fork [1].
> > This is what I have done so far:
> > * Read mapping files.
> > * Read configuration files (Ignite parameters).
> > * Initialize Ignite DataStore through JDBC connection.
> > * Implement some trivial methods (#close(), #flush(),
> #getSchemaName()...).
> > * Set up an embedded Ignite instance within test packages.
> >
> > The code is broken because I created a DataStoreTestBase implementation
> for
> > Ignite and due the fact that most DataStore methods are not implemented
> yet
> > the tests are failing. But the mapping/configuration reading and
> connection
> > initialization are working fine.
> >
> > I noticed that the mapping files (gora-XX-mapping.xml) have two fields
> > 'boss' and 'webpage', which I assume are references to other objects
> (other
> > mapped classes). I was wondering how the backend should deal with them.
> Is
> > there some documentation regarding that?.
> >
> > Regards,
> > Carlos
> >
> >
> > [1] https://github.com/carlosrmng/gora/tree/GORA-535
> >
>

Reply via email to