Hi, Carlos. Nice analysis. It looks a good to me to start with the serialized approach. Personally, I tend to be too much ambitious, so I encourage to keep it simple :) Reading your analysis brings me lots of ideas (always time consuming ideas), like creating two Stores for each case with blahblahbla. So: *avoid my errors, keep it simple* ;) For sure, if later you have more time to spend, things can be improved, but no need to rush, I guess.
Just my oppinion. I know nothing :P Maybe others with knowledge of other Stores think the other way around. Regards, Alfonso Nishikawa 2018-06-26 3:57 GMT-01:00 carlos muñoz <[email protected]>: > 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 > > > > > >

