Thanks for the great feedback Rick! I created enhancement requests for your suggestions at https://trac.neo4j.org/ticket/292 - 288 so we don't drop them!
Cheers, /peter neubauer GTalk: neubauer.peter Skype peter.neubauer Phone +46 704 106975 LinkedIn http://www.linkedin.com/in/neubauer Twitter http://twitter.com/peterneubauer http://www.neo4j.org - Your high performance graph database. http://www.thoughtmade.com - Scandinavia's coolest Bring-a-Thing party. On Wed, Dec 1, 2010 at 9:22 PM, <[email protected]> wrote: > These topics are fairly integral to what we do in ThingWorx, so I can > share some feedback: > > > > In our world "what goes where" isn't always determined by us - there > are zillions of legacy data stores that might need to be integrated. > They could be relational, proprietary, or accessed via some type of API > or service invocation. Thus, our application needs to elastic enough > to leverage those sources as well. In our case, we've chosen to create > an abstraction layer for datasets, services, and events that allows us > to manage this complexity and to create heterogeneous > views/services/applications from that complexity. > > > > In terms of data we "can" control, we've chosen (for now) to put it all > into Neo. This includes our modeling/metamodel (data, scripts/logic, > visualizations, services, domain data types, etc.) as well as the data > we collect (which is basically in two main forms: activity streams and > "tables"). We've implementing an in-memory data transformation engine > that allows us to do "sql-like" things (filter, sort, aggregate, join, > etc.) on data from any of the aforementioned sources, as well as for > data from our own domain objects (which uses the same dataset > abstraction that we apply to external data). > > > > In terms of transactions, at this point, we have not yet going as far > as implementing hybrid transactions that wrap both external (JDBC) > transactions and Neo transactions. However, we have abstracted the way > things get "invoked" such that it would be easy to place a single > transaction wrapper around anything that might potentially manipulate > data (in fact, it's implemented today but only for Neo transactions). > > > > I'm not sure what you mean in terms of "message queues for data > distribution", but we use queues in two main ways within ThingWorx. > First, we use "writer" queues to manage writing of stream entries and > data table entries into Neo, since these will tend to be very high > frequency/high volume writes and we didn't want to have to create a > separate transaction for each of them. We use a set of workers that > flush writes after each "X" seconds have elapsed or when "Y" records > are waiting to be written. There are persistence helpers that know how > to persist the various types of domain objects that get queued up. The > other place we use them is for distribution of "events". These could > be from internal or external sources, as a result of data mutation, > user interaction, service invocation, timer, etc...we use queues as a > means of regulating the flow/loading and to manage > distribution/subscriptions. > > > > In terms of data migration strategies, that's an area where we're > currently doing some exploration. We already have some basic "stuff" > to take structures from RDBMS tables and turn them into their > equivalent structures (and metamodel structures) in our platform and > therefore in Neo, but we haven't really done much with it yet nor have > we done much with things like indexes and constraints. Just simple > data for now. What we are also exploring is using Neo to "index" data > that might reside in external tables. The searchable view of the data > would reside in Neo and we would maintain a reference back to the > original source (table/row/unique identifier in that row) when we need > to retrieve the original data. Sort of a spidering/crawling approach > for now, though we would like it to also be event driven at some point. > > > > In terms of "features" that could help in the context of the questions > you've asked, I suppose a few things come to mind: > > > > - The ability to enlist/contain a Neo transaction into other > transactions (and vice versa, I suppose) > > - Richer data typing beyond the primitives that Neo stores today > (DateTime and Location being a few interesting and common ones). > Ideally this could be extensible. Currently, we use the domain object's > metadata to help with this, which works OK > > - Special treatment for storing/retrieving large strings or blobs > (perhaps even at the expense of performance on these activities, but > indirectly improving performance on node/relationship/property > reads/writes due to reduced memory consumption) > > - Support for "structured" storage (e.g. a property that represents a > structure rather than a primitive). Using stuff like serialization is > too fragile and platform/language-specific, but perhaps with some type > of minimalist metamodeling/schemas this could be accomplished fairly > easily (or some type of generic persistent model that knew how to deal > with JSON objects, XML documents, native Java objects, Maps/Sets, > etc.). This is all stuff that we've had to write on our own > > - Support for the idea of "node types" (similar to relationship > types). Currently, we stamp each node with a String property that > indicates its "type". Strings are not the most efficient way to do it, > as we all know. > > > > Rick > > > > > > -------- Original Message -------- > Subject: [SPAM] [Neo4j] Cats and Dogs, living together > From: Andreas Kollegger <[1][email protected]> > Date: Wed, December 01, 2010 12:52 pm > To: Neo4j user discussions <[2][email protected]> > Would anybody be willing to share experiences with trying to introduce > Neo4j into a system with another relational (or other NoSQL) database? > We're starting to think about best practices for integration: > * Hybrid data-modeling: what goes where? > * XA transactions > * message queues for data distribution > * data migration strategies > Any problems or feature-requests related to living in a > multi-storage-platform world are welcome. > Cheers, > Andreas > _______________________________________________ > Neo4j mailing list > [3][email protected] > [4]https://lists.neo4j.org/mailman/listinfo/user > > References > > 1. mailto:[email protected] > 2. mailto:[email protected] > 3. mailto:[email protected] > 4. https://lists.neo4j.org/mailman/listinfo/user > _______________________________________________ > Neo4j mailing list > [email protected] > https://lists.neo4j.org/mailman/listinfo/user > _______________________________________________ Neo4j mailing list [email protected] https://lists.neo4j.org/mailman/listinfo/user

