Hi!

Seems right to me. And yes, key/value would typically be storing the 
relationship type. We should bring this up again next week, when Mattias 
who wrote the indexing stuff is back from vacation!

/anders

On 07/28/2011 03:05 PM, John cyuczieekc wrote:
> with relationshipindex seems to be working as fast, though I am not sure if
> I am using it right ie.
> doing this first time:
> RelationshipIndex ri = graphDB.index().forRelationships( "relsIndex" );
>
> and on each relationship created between sNode-->eNode where eNode is any
> random node, and sNode is the same on each call (in my case)
> Relationship rel = sNode.createRelationshipTo( eNode, linkedRelType );
> ri.add( rel, "key", "value" );
>
> and when checking if sNode-->eNode exists:
> final Relationship rel = ri.query( "key", "value", sNode, eNode
> ).getSingle();
> if ( null == rel ) {
>              return false;
>          } else {
>              return true;
>          }
>
> seems to me that using those `key` and `value` are useless, unless I'm
> missing something; I'm probably using them wrongly but in my case I only
> have one type of relationship.
>
> In either case, the timings as good ~1ms, and no memory increase, so this
> would seem like a good workaround; with findSinglePath the memory would
> increase by 1 gig (for my test)
>
> Thanks for suggesting to revisit RelationshipIndex, last time I dropped it I
> think because I didn't know what to put on key/value.
>
> Also, I get what Niels meant now by that play nice with transactions, that
> if both neo4j and bdb recover the same things after crash/recovery or not...
>
>
> On Thu, Jul 28, 2011 at 2:05 PM, Anders 
> Nawroth<and...@neotechnology.com>wrote:
>
>> Hi!
>>
>> I think the hard part about transactions is recovering after crashes and
>> such.
>>
>> Regarding finding A-->B, have you tried using a relationship index? See:
>>
>> http://components.neo4j.org/neo4j/1.4/apidocs/org/neo4j/graphdb/index/ReadableRelationshipIndex.html
>>
>> /anders
>>
>> On 07/28/2011 01:35 PM, John cyuczieekc wrote:
>>> I don't know what you mean by this:
>>> "I don't know how nicely BDB plays with Neo4J transactions."
>>> I have some small experience with bdb java edition that is, but I'm not
>> sure
>>> what would their transaction have to do with neo4j transactions... if you
>>> meant if you could make a wrapper such that you could use the same
>>> format/interface neo4j uses for their transactions, then you can, I did
>> some
>>> attempt to that it works for me, also BDB Java Edition doesn't support
>>> nested transactions either (the C++ version does), but emulating them to
>> use
>>> the same root/parent transaction is easy, my attempt is here:
>>>
>> https://github.com/13th-floor/neo4john/blob/6c0371e82b7fc5b5f45d7c0ea9fb03ee4d241df9/src.obsolete/org/bdb/BETransaction.java
>>> probably not much relevant though. But this file here:
>>>
>> https://github.com/13th-floor/neo4john/blob/master/src/org/benchtests/neo4j/TestLinkage.java
>>> I made to use both neo4j and bdb to do the same thing, that is:
>>> create nodes(uppercase named ones) with these rels:
>>> ROOT_LIST -->   START
>>> ROOT_LIST -->   <half a million unique nodes>
>>> ROOT_LIST -->   MIDDLE
>>> ROOT_LIST -->   <another half a million unique nodes>
>>> ROOT_LIST -->   END
>>>
>>> then make both bdb and neo4j check if the following rels exist:
>>> ROOT_LIST -->   START
>>> ROOT_LIST -->   MIDDLE
>>> ROOT_LIST -->   END
>>> (you probably saw this already in another post)
>>> But both bdb and neo4j now use transactions... that is, in my test file.
>>>
>>> About licensing, I'm not much into that but here's the license for
>> Berkeley
>>> DB Java Edition:
>>>
>> http://www.oracle.com/technetwork/database/berkeleydb/downloads/jeoslicense-086837.html
>>> Looks like New(or normal?) BSD license or something ...
>>> also
>>> "
>>> Licensing
>>>
>>> Berkeley DB is available under dual license:
>>>
>>>      - Public license that requires that software that uses the Berkeley
>> DB
>>>      code be free/open source software; and
>>>      - Closed source license for non-open source software.
>>>
>>> If your code is not redistributed, no license is required (free for
>> in-house
>>> use).
>>>
>>> "
>>>
>>> from http://www.orafaq.com/wiki/Berkeley_DB#Licensing
>>>
>>>
>>> I would totally use neo4j, if it would be as fast at searches :/ ie.
>> BTree
>>> storage of nodes/rels? (guessing)
>>>
>>> But having 10mil rels, and seeing BDB checking if A-->B in 0ms, and neo4j
>> in
>>> like 0 to 66 to 310 seconds (depending on its position)
>>>
>>> is a show stopper for me, especially because I want to base everything on
>>> just nodes (without properties) and their relationships. ie. make a set
>> or
>>> list of things, without having A ---[ENTRY]-->   e ---[NEXT] --->   e2  but
>>> instead A->b->e->c->e2  where b and c are just nodes, and also
>>> AllEntries->b  and AllNexts->c   (silly example with such less info tho)
>>>
>>> Point is, I would do lots of searches a lot (imagine a real time program
>>> running on top of nodes/rels, that is it's defined in and can access only
>>> nodes), this would likely cause those ms to add up to seconds...
>>>
>>>
>>> I installed maven (m2e) again, I guess I could use it, but it seems it
>>> creates .jar , not sure if that's useful to me while I am coding... seems
>>> better to use project/sources no? and maven only when ready to
>> publish/get
>>> the jar ; anyway I need to learn how to use it otherwise I'm getting
>> errors
>>> like this , when trying to build:
>>>
>>> [ERROR]   The project org.neo4j:neo4j-graph-collections:1.5-SNAPSHOT
>>> (E:\wrkspc\graph-collections\pom.xml) has 1 error
>>> [ERROR]     Non-resolvable parent POM: The repository system is offline
>> but
>>> the artifact org.neo4j:parent-central:pom:21 is not available in the
>> local
>>> repositor
>>> y. and 'parent.relativePath' points at wrong local POM @ line 4, column
>> 11
>>> ->   [Help 2]
>>>
>>>
>>>
>>> Anyway, with normal eclipse, I'm still showing 2 different errors:
>>>
>>> 1) in org.neo4j.collections.graphdb.ComparablePropertyType<T>
>>>
>>> line 29: super(name, graphDb);
>>>
>>> The constructor PropertyType<T>(String, GraphDatabaseService) is not
>> visible
>>>
>>> 2) org.neo4j.collections.graphdb.impl.NodeLikeImpl.getRelationships()
>>> The return type is incompatible with
>>> RelationshipContainer.getRelationships()
>>>
>>> 3)
>>>
>> org.neo4j.collections.graphdb.impl.NodeLikeImpl.getRelationships(RelationshipType...)
>>> The return type is incompatible with
>>> RelationshipContainer.getRelationships(RelationshipType[])
>>>
>>>
>>> John.
>>>
>>> On Thu, Jul 28, 2011 at 12:52 PM, Niels Hoogeveen<
>> pd_aficion...@hotmail.com
>>>> wrote:
>>>
>>>>
>>>> Hi John,
>>>> Thanks for showing an interest.
>>>> The compile error you got was due to the fact that a removed class was
>>>> still hanging around in the Git repo. I renamed BinaryRelationshipRoles
>> into
>>>> BinaryRelationshipRole, but the original file was still active in the
>> Git
>>>> repo. I fixed that.
>>>> I have been thinking about BDB too for this situation, because the graph
>>>> database now stores some information about the associated nodes and
>> their
>>>> reverse lookup. This of course polutes the name/node space. It would be
>> neat
>>>> to offload this book keeping information to some persistent hashmap, so
>> the
>>>> implementation is completely transparent to the user.
>>>> I don't know how nicely BDB plays with Neo4J transactions. Does anyone
>> have
>>>> experience with this?
>>>> Another aspect is licencing. I am no legal buff, so maybe someone else
>> can
>>>> jump in and answer this.
>>>> Personally, I don't mind adding BDB as a dependency, but it has to work
>>>> well at the transaction level and licence wise, otherwise it's a no go
>> for
>>>> me.
>>>> I would recommend you to start using maven. There is an Eclipse plugin
>>>> m2eclipse, which allows you to use/maintain Maven projects from within
>>>> Eclipse.
>>>> Niels
>>>>
>>>>> Date: Thu, 28 Jul 2011 05:09:54 +0200
>>>>> From: cyuczie...@gmail.com
>>>>> To: user@lists.neo4j.org
>>>>> Subject: Re: [Neo4j] HyperRelationship example
>>>>>
>>>>> Hey Niels,
>>>>>
>>>>> I like xD
>>>>> this seems like a lot of work and professionally done; ie. something I
>>>> could
>>>>> not have done (I don't have that kind of experience and focus). Gratz
>> on
>>>>> that, I really appreciate seeing this.
>>>>>
>>>>> I cloned the repo from git, manually, with eclipse (not using maven -
>>>> don't
>>>>> know how with eclipse)
>>>>> I am getting only about 3 compile errors, like:
>>>>> 1) The type BinaryRelationshipRoles<T>   must implement the inherited
>>>> abstract
>>>>> method PropertyContainer.getId()
>>>>> 2) The constructor PropertyType<T>(String, GraphDatabaseService) is not
>>>>> visible
>>>>> 3) The return type is incompatible with
>>>>> RelationshipContainer.getRelationships()
>>>>> for
>>>>>
>>>>
>> org.neo4j.collections.graphdb.impl.RelationshipIterable.RelationshipIterable(Iterable<Relationship>
>>>>> rels)
>>>>>
>>>>>
>>>>>     Also, I am thinking to try and implement this on top of berkeleydb
>> just
>>>>> for fun/benchmarking (so to speak) to compare between that and neo4j -
>>>> since
>>>>> I am currently unsure which one to use for my hobby project (I like
>> that
>>>>> berkeleydb's searches are 0-1ms instead of few seconds)
>>>>>
>>>>> Btw, would it be any interest to you if I were to fork your repo and
>> add
>>>> ie.
>>>>> AllTests.java for junit and the .project and related files for eclipse
>>>>> project in a pull or two ? as long as it doesn't seem useless or
>>>>> cluttering... (note however I never actually, yet, used fork&pull but
>>>> only
>>>>> read about it on github xD)
>>>>>
>>>>> Thanks to all, for wasting some time reading this,
>>>>> Greeting and salutations,
>>>>> John
>>>>>
>>>>> On Wed, Jul 27, 2011 at 8:48 PM, Niels Hoogeveen
>>>>> <pd_aficion...@hotmail.com>wrote:
>>>>>
>>>>>>
>>>>>> I just posted an example on how to use HyperRelationships:
>>>>>>
>>>>>>
>>>>>>
>>>>
>> https://github.com/peterneubauer/graph-collections/wiki/HyperRelationship-example
>>>>>>
>>>>>> There is now a proper test for HyperRelationships, so I hereby push
>> the
>>>>>> software to Beta status.
>>>>>>
>>>>>> Please try out the Enhanced API and HyperRelationships and let me know
>>>> what
>>>>>> needs improvement.
>>>>>>
>>>>>> Niels
>>>>>> _______________________________________________
>>>>>> 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
>>>>
>>> _______________________________________________
>>> 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
_______________________________________________
Neo4j mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to