Hi Johan,

Thanks! Quick summary, it was definitely a config issue. Changing to
the recommend config settings makes the exceptions go away. Weird
though, those config values are for VM memory management. But the
exceptions looked like file I/O issues. How does Neo4J get around the
OS max file size limitation, does it just overflow into a new file?

> I successfully ran the code resulting in roughly 190M nodes/properties
> and 390M relationships injected in 35min (the condition in one of your
> for loops probably has a typo, should have been person<numberOfPeople

Oh thanks, I thought that I was accessing a nodeID that didn't exist,
so I tried to go above the total number of nodes. I forgot to change
it back. Sorry.


> I first tried on my laptop but ran out of disk space (with a similar
> exception you got) since the full load requires 41GB of free space.
> Could you please try the injection again (using similar configuration
> and verifying you have enough disk space)?

I had enough disk space, 200GB+. I am still getting heap issues, I
don't have enough memory on my laptop, but I will run it on the cloud
later and they should go away.

> Also (maybe not important since this is just a test but) relationships
> can be treated as bi-directional/non directed using the enum constant
> Direction.BOTH, so the two relationships a-KNOWS->b  and b-KNOWS->a
> can be represented with one a-KNOWS-b.

This is just for traversals, no? You can't define it as bi-directional
on creation, can you?  I noticed that Neo doesn't explicitly define
cardinality (many-to-many, one-to-many, etc). Everything is supported
though. And the API is concise, which is prefereable.

Thanks again.

Regards,
Todd

> Regards,
> -Johan
>
> On Wed, Sep 9, 2009 at 3:11 AM, Todd Stavish<toddstav...@gmail.com> wrote:
>> He Johan,
>>
>>> What OS do you run this on? The FileChannel.write fail with an
>>> exception saying buffer is too large is new to me.
>>
>> OSX. Snow Leopard.
>>
>> java -version
>> java version "1.6.0_15"
>> Java(TM) SE Runtime Environment (build 1.6.0_15-b03-219)
>> Java HotSpot(TM) 64-Bit Server VM (build 14.1-b02-90, mixed mode)
>>
>> I can try it on centos too. I was  going to try to run in it in EC2,
>> but lost momentum and ideas to try.
>>
>>> Try decrease the amount of memory you give the store files (if you
>>> have modified default configuration) and make sure you at least have
>>> disk space to write out 1/10th of the dedicated memory for each store
>>> file.
>>
>> Plenty of disk space. Do you mean pre-allocate the database file? How
>> do you do that?
>>
>>> I will run some tests on this code first thing in the morning to see
>>> if I can reproduce it.
>>
>> Thanks. I will send you the input files. And other code.
>>
>> Regards,
>> Todd
>>
>>
>>> -Johan
>>>
>>> On Tue, Sep 8, 2009 at 5:45 PM, Todd Stavish<toddstav...@gmail.com> wrote:
>>>> Hello All,
>>>>
>>>> I hope that I haven't been too demanding of this list. I am pushing a
>>>> tight deadline. I can't seem to get Neo4J to scale above 1.5 million
>>>> nodes. The code is simple, just create a node, give it one property.
>>>> Then go back and randomly create relationships. I moved to the
>>>> BatchInserter too. Is there a way to use more than one DB? Is it a
>>>> file size limitation? Can I commit incrementally somehow? I looked at
>>>> the BatchInterter source, and there doesn't seem to be anything that I
>>>> can do.
>>>>
>>>> Exceptions and demo code below.
>>>>
>>>> Thanks,
>>>> Todd
>>>>
>>>>
>>>>
>>>>
>>>> Created 1516633 nodes in 33 seconds
>>>>
>>>> Exception in thread "main"
>>>> org.neo4j.impl.nioneo.store.StoreFailureException: Unable to write
>>>> record[1419120] @[188742960]
>>>>        at 
>>>> org.neo4j.impl.nioneo.store.AbstractPersistenceWindow.writeOut(AbstractPersistenceWindow.java:111)
>>>>        at 
>>>> org.neo4j.impl.nioneo.store.AbstractPersistenceWindow.force(AbstractPersistenceWindow.java:123)
>>>>        at 
>>>> org.neo4j.impl.nioneo.store.PersistenceWindowPool.flushAll(PersistenceWindowPool.java:229)
>>>>        at 
>>>> org.neo4j.impl.nioneo.store.PersistenceWindowPool.close(PersistenceWindowPool.java:203)
>>>>        at 
>>>> org.neo4j.impl.nioneo.store.CommonAbstractStore.close(CommonAbstractStore.java:503)
>>>>        at 
>>>> org.neo4j.impl.nioneo.store.PropertyStore.closeStorage(PropertyStore.java:106)
>>>>        at 
>>>> org.neo4j.impl.nioneo.store.CommonAbstractStore.close(CommonAbstractStore.java:500)
>>>>        at 
>>>> org.neo4j.impl.nioneo.store.NeoStore.closeStorage(NeoStore.java:81)
>>>>        at 
>>>> org.neo4j.impl.nioneo.store.CommonAbstractStore.close(CommonAbstractStore.java:500)
>>>>        at 
>>>> org.neo4j.impl.batchinsert.BatchInserterImpl.shutdown(BatchInserterImpl.java:311)
>>>>        at 
>>>> com.palantir.pathfind.GraphIngestBatch.main(GraphIngestBatch.java:78)
>>>> Caused by: java.io.IOException: Result too large
>>>>        at sun.nio.ch.FileDispatcher.pwrite0(Native Method)
>>>>        at sun.nio.ch.FileDispatcher.pwrite(FileDispatcher.java:45)
>>>>        at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:100)
>>>>        at sun.nio.ch.IOUtil.write(IOUtil.java:75)
>>>>        at sun.nio.ch.FileChannelImpl.write(FileChannelImpl.java:651)
>>>>        at 
>>>> org.neo4j.impl.nioneo.store.AbstractPersistenceWindow.writeOut(AbstractPersistenceWindow.java:105)
>>>>
>>>>
>>>> public class GraphIngestBatch
>>>> {
>>>>
>>>>        public static void main(String[] args)
>>>>        {
>>>>                try
>>>>                {
>>>>
>>>>                        // Create graph database service
>>>>                        BatchInserter neo = new 
>>>> BatchInserterImpl("graphDB/",
>>>> BatchInserterImpl.loadProperties("neo.props"));
>>>>
>>>>                        // Read raw text for name data
>>>>                        FileReader namesFile = new
>>>> FileReader("/Users/todd/Code/pathfind/target/classes/rawData/lastNames.txt");
>>>>                        BufferedReader namesBuffer = new 
>>>> BufferedReader(namesFile);
>>>>                        String name;
>>>>
>>>>                // Start timer and counter
>>>>                Stopwatch timer = new Stopwatch();
>>>>                timer.start();
>>>>                        long numberOfPeople = 1;
>>>>
>>>>                        // Initialize root node
>>>>                        long person, neighbor;
>>>>                        Map<String,Object> properties = new 
>>>> HashMap<String,Object>();
>>>>                        properties.put("name", "Philberto Anderossono");
>>>>                        neighbor = neo.createNode(properties);
>>>>                        neo.createRelationship(neighbor, 0,
>>>> DynamicRelationshipType.withName("ROOT"), null);
>>>>
>>>>                        // Create people and neighbor relationships
>>>>                        while ((name = namesBuffer.readLine()) != null)
>>>>                        {
>>>>                                properties.put("name", name);
>>>>                                person = neo.createNode(properties);
>>>>
>>>>                                neo.createRelationship(person, neighbor,
>>>> DynamicRelationshipType.withName("KNOWS"), null);
>>>>                                neo.createRelationship(neighbor, person,
>>>> DynamicRelationshipType.withName("KNOWS"), null);
>>>>
>>>>                                neighbor = person;
>>>>                                numberOfPeople++;
>>>>                        }
>>>>                        namesBuffer.close();
>>>>                        namesFile.close();
>>>>
>>>>                        System.out.println("Number of people is: " + 
>>>> numberOfPeople);
>>>>
>>>>                        // Randomly generate relationships (minimum four 
>>>> per person + both
>>>> neighbors, mean ten relationships / person)
>>>>                        Long friend;
>>>>                        int numberOfFriends = 1;
>>>>                        for (person=1; person>numberOfPeople; person++)
>>>>                        {
>>>>                                for (int i=0; i<numberOfFriends; i++)
>>>>                                {
>>>>                                        friend = 
>>>> Uniform.staticNextLongFromTo(1, numberOfPeople);
>>>>                                        if (person != friend)
>>>>                                        {
>>>>                                                
>>>> neo.createRelationship(person, friend,
>>>> DynamicRelationshipType.withName("KNOWS"), null);
>>>>                                                
>>>> neo.createRelationship(friend, person,
>>>> DynamicRelationshipType.withName("KNOWS"), null);
>>>>                                        }
>>>>                                }
>>>>                        }
>>>>
>>>>                        // Stop timer
>>>>                timer.stop();
>>>>                System.out.println("Created " + numberOfPeople + " people in
>>>> " + timer.getElapsedTimeSecs() + " seconds");
>>>>
>>>>                        // shutdown, makes sure all changes are written to 
>>>> disk
>>>>                        neo.shutdown();
>>>>
>>>>                }
>>>>                catch (java.io.FileNotFoundException ex)
>>>>                {
>>>>                        System.out.println("File does not exist.");
>>>>                }
>>>>                catch (java.io.IOException ex)
>>>>                {
>>>>                    ex.printStackTrace() ;
>>>>                }
>>>>
>>>>        }
>>>> }
> _______________________________________________
> Neo mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
>
_______________________________________________
Neo mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to