Hi Peter,
Yeah it's under control now.

Cheers,
Alex

On Thu, May 27, 2010 at 5:36 PM, Peter Neubauer <
[email protected]> wrote:

> Alex,
> not an expert on delete performance but that looks ok to me, and is
> workable for you now?
>
> Cheers,
>
> /peter neubauer
>
> COO and Sales, Neo Technology
>
> 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 Tue, May 25, 2010 at 9:51 AM, Alex Averbuch <[email protected]>
> wrote:
> > OK, seems to be running much faster now.
> > The reason for such slow performance was mine, not Neo4j's.
> >
> > Before the input parameters to my function allowed the user to specify
> > exactly how many Relationships should be removed. This meant in order to
> be
> > "fair" I had to uniformly randomly generate ID's in the key space (also
> > defined by input parameter). The problem with this approach is as time
> > passes it becomes more likely to select an ID that has already been
> removed.
> > I had checks to avoid errors as a result, but it still meant many wasted
> > disk reads.
> >
> > //BEFORE
> > until (graph_is_small_enough)
> >  random_number = generate_uniform(0, maxId)
> >  random_relationship = get_relationship_by_id(random_number)
> >  random_relationship.delete()
> >
> > Now the input parameters only let the user specify the PERCENTAGE of all
> > Relationships that should be kept.
> > This means I don't need to keep an state that tells me which ID's have
> > already been deleted, and I can iterate through all Relationships and
> never
> > have a "missed read" (assuming there are no wholes in the key space).
> >
> > //NOW
> > for (index=0 to maxId)
> >  random_number = generate_uniform(0, maxId)
> >  if (random_number < percent_to_keep)
> >    continue;
> >  random_relationship = get_relationship_by_id(index)
> >  random_relationship.delete()
> >
> > Performance is much better now. The first 1,000,000 deletions took
> ~4minutes
> >
> > Cheers,
> > Alex
> >
> > On Mon, May 24, 2010 at 11:24 PM, Alex Averbuch <[email protected]
> >wrote:
> >
> >> Hey,
> >> I have a large (by my standards) graph and I would like to reduce it's
> size
> >> so it all fits in memory.
> >> This is that same Twitter graph as I mentioned earlier: 2.5million Nodes
> >> 250million Relationships.
> >>
> >> The goal is for the graph to still have the same topology and
> >> characteristics after it has been made more sparse.
> >> My plan to do this was to uniformly randomly select Relationships for
> >> deletion, until the graph is small enough.
> >>
> >> My first approach is basically this:
> >>
> >> until (graph_is_small_enough)
> >>   random_relationship = get_relationship_by_id(random_number)
> >>   random_relationship.delete()
> >>
> >> I'm using the transactional GraphDatabaseService at the moment, rather
> than
> >> the BatchInserter... mostly because I'm not inserting anything and I
> assumed
> >> the optimizations made to the BatchInserter were only for write
> operations.
> >>
> >> The reason I want to delete Relationships instead of Nodes is
> >>   (1) I don't want to accidentally delete any "super nodes", as these
> are
> >> what gives Twitter it's unique structure
> >>   (2) The number of Nodes is not the main problem that's keeping me from
> >> being able to store the graph in RAM
> >>
> >> The problem with the current approach is that it feels like I'm working
> >> against Neo4j's strengths and it is very very slow... I waited over an
> hour
> >> and less than 1,000,000 Relationships had been deleted. Given that my
> aim is
> >> to half the number of Relationships, it would take me over 100hours (1
> week)
> >> to complete this process. In the worst case this is what I'll resort to,
> but
> >> I'd rather not if there's a better way.
> >>
> >> My questions are:
> >> (1) Can you think of an alternative, faster and still meaningful
> (maintain
> >> graph structure) way to reduce this graph size?
> >> (2) Using the same method I'm using now, are there some magical
> >> optimizations that will greatly improve performance?
> >>
> >> Thanks,
> >> Alex
> >>
> > _______________________________________________
> > Neo4j mailing list
> > [email protected]
> > 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

Reply via email to