Thanks for sharing with us the details,

Your solutions sounds innovative and interesting but You have stored
the relationships only in the model graph. does it mean you have a
fixed schema and how to store new relationships between different
nodes. Its really difficult to understand how can you store
relationships only once in a model graph and only nodes in the data
graph?
Regards,
Ali

On 7/3/11, Rick Bullotta <rick.bullo...@thingworx.com> wrote:
> Our approach is very application-specific, but it can be summarized by:
>
> - We keep our model database on one server and our "run time" data (somewhat
> like activity streams) on another server
> - A long value (node id) "source" property on data nodes that identify a
> model node in the other graph
> - Long value (node id) "server" property on data nodes that identify a node
> in the same graph, which contains "logical server" information stored as
> properties (logical name + domain name/IP address + port + protocol)
> - Lucene indices on the data nodes that index the data by tag(s), source,
> and time
> - Relationships in the "model" graph that describe inter-entity model
> relationships (inheritance, reference), dependencies and usage references,
> etc.
> - Lucene indices on the model nodes that index the model entities by type,
> tag(s)
> - Lucene indices on the "tagging" vocabularies on both the model and data
> graph(s)
>
> We avoided using relationships in the data graph due to the fact that we are
> constantly adding and deleting potentially thousands of items per second,
> and this could create concurrency and performance issues when there are
> potentially millions of relationships on a node
>
> We didn't originally design it this way.  The original approach was a single
> (embedded) database, using relationships for all node<->node connections.
> We're in the process of moving to our new design in phases, the first of
> which was a logical separation of model + data, though in the same graph,
> and switching from relationships to the "node id property" approach for some
> specific scenarios.
>
> I have to think there are substantial performance implications *if* you are
> trying to do complex cross-shard or cross-graph traversals, which we
> generally do not need to do.  Rather, we can deal with this at the
> application layer.
>
>
>
>
> -----Original Message-----
> From: Aliabbas Petiwala [mailto:aliabba...@gmail.com]
> Sent: Sunday, July 03, 2011 2:54 AM
> To: Neo4j user discussions
> Subject: Re: [Neo4j] reify links with other neo4j databases located on
> different distributed servers
>
> Thanks a lot Rick
>
> can you please provide more details on  issues which you faced while
> using this approach and  share some code with us .
> Had you decided about this at design time itself and designed your
> graph db schema accordingly?
> Is there much perceived performance penalties if there are a large
> number of such references spanning physical boundaries?
>
> On 7/2/11, Rick Bullotta <rick.bullo...@thingworx.com> wrote:
>> We are using node-id property references (the node id as a property),
>> qualified with a "logical server" reference, to provide this type of
>> binding
>> across graphs. If you combine these with an index, you can actually get a
>> lot of the functionality of relationships "cross graph", spanning physical
>> boundaries.  Of course, as Craig points out, this all has to be done at
>> the
>> application level, including dealing with cascading deletes when a node is
>> removed from one graph, ensuring that references to it in another graph
>> are
>> removed/redirected.
>>
>> -----Original Message-----
>> From: user-boun...@lists.neo4j.org [mailto:user-boun...@lists.neo4j.org]
>> On
>> Behalf Of Craig Taverner
>> Sent: Saturday, July 02, 2011 6:03 AM
>> To: Neo4j user discussions
>> Subject: Re: [Neo4j] reify links with other neo4j databases located on
>> different distributed servers
>>
>> As far as I know there is no internal support for transparent traversals
>> across shards. Generally people are doing that in the application layer.
>> However, I think there might be a middle ground of sorts. I we modify the
>> relationship expander, I could imagine that relationships that are between
>> shards could be modified to return node on the other shard. This would
>> make
>> the traversal return nodes across shards, but since I've not tried this
>> myself, I am uncertain if there are other consequences.
>>
>> On Sat, Jul 2, 2011 at 4:03 AM, Aliabbas Petiwala
>> <aliabba...@gmail.com>wrote:
>>
>>> Hi,
>>>
>>> I cannot figure out how my application logic can reify links with
>>> other neo4j databases located on different distributed servers?
>>> hence , how can i make the traversals and graph algorithms transparent
>>> to the location of the different databases ?
>>> --
>>> Aliabbas Petiwala
>>> M.Tech CSE
>>> _______________________________________________
>>> Neo4j mailing list
>>> User@lists.neo4j.org
>>> https://lists.neo4j.org/mailman/listinfo/user
>>>
>> _______________________________________________
>> Neo4j mailing list
>> User@lists.neo4j.org
>> https://lists.neo4j.org/mailman/listinfo/user
>> _______________________________________________
>> Neo4j mailing list
>> User@lists.neo4j.org
>> https://lists.neo4j.org/mailman/listinfo/user
>>
>
>
> --
> Aliabbas Petiwala
> M.Tech CSE
> _______________________________________________
> Neo4j mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
>


-- 
Aliabbas Petiwala
M.Tech CSE
_______________________________________________
Neo4j mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to