I noticed that the splitter processing does a large number of small read
& writes. The speed can be doubled by using buffered IO as per the
attached patch.

Before:
$ time java -Xmx1500m -jar splitter/dist/splitter.jar --max-nodes=1000000 
--cache=cache /store/planet/great_britain-20091114.osm.bz2
...
Wrote 11,101,332 nodes, 1,485,442 ways, 54,180 relations
Time finished: Sat Nov 14 13:43:40 GMT 2009
Total time taken: 675s

real    11m15.561s
user    6m17.064s 
sys     4m19.885s 



After:
Wrote 11,101,332 nodes, 1,485,442 ways, 54,180 relations
Time finished: Sat Nov 14 14:17:37 GMT 2009
Total time taken: 305s

real    5m5.343s
user    4m42.738s
sys     0m8.555s


I did remember to delete the cache between the two runs.

        Jon


Index: src/uk/me/parabola/splitter/Utils.java
===================================================================
--- src/uk/me/parabola/splitter/Utils.java	(revision 97)
+++ src/uk/me/parabola/splitter/Utils.java	(working copy)
@@ -18,6 +18,7 @@
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.Reader;
+import java.io.BufferedInputStream;
 import java.nio.charset.Charset;
 import java.text.NumberFormat;
 import java.util.zip.GZIPInputStream;
@@ -91,7 +92,7 @@
 			}
 		} else if (name.endsWith(".bz2")) {
 			try {
-				is.read(); is.read(); is = new CBZip2InputStream(is);
+				is.read(); is.read(); is = new CBZip2InputStream(new BufferedInputStream(is,10240));
 			} catch (IOException e) {
 				throw new IOException( "Could not read " + name + " as a bz2 compressed file", e);
 			}
Index: src/uk/me/parabola/splitter/disk/NodeStoreWriter.java
===================================================================
--- src/uk/me/parabola/splitter/disk/NodeStoreWriter.java	(revision 97)
+++ src/uk/me/parabola/splitter/disk/NodeStoreWriter.java	(working copy)
@@ -12,6 +12,7 @@
  */
 package uk.me.parabola.splitter.disk;
 
+import java.io.BufferedOutputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -22,7 +23,7 @@
 public class NodeStoreWriter extends AbstractStoreWriter {
 
 	public NodeStoreWriter(String filename) throws IOException {
-		this(new FileOutputStream(filename), new KeyLookupWriter(filename + ".keys"));
+		this(new BufferedOutputStream(new FileOutputStream(filename),10240), new KeyLookupWriter(filename + ".keys"));
 	}
 
 	public NodeStoreWriter(OutputStream out, KeyLookupWriter keys) {
Index: src/uk/me/parabola/splitter/disk/WayStoreWriter.java
===================================================================
--- src/uk/me/parabola/splitter/disk/WayStoreWriter.java	(revision 97)
+++ src/uk/me/parabola/splitter/disk/WayStoreWriter.java	(working copy)
@@ -12,6 +12,7 @@
  */
 package uk.me.parabola.splitter.disk;
 
+import java.io.BufferedOutputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -22,7 +23,7 @@
 public class WayStoreWriter extends AbstractStoreWriter {
 
 	public WayStoreWriter(String filename) throws IOException {
-		this(new FileOutputStream(filename), new KeyLookupWriter(filename + ".keys"));
+		this(new BufferedOutputStream(new FileOutputStream(filename),10240), new KeyLookupWriter(filename + ".keys"));
 	}
 
 	public WayStoreWriter(OutputStream out, KeyLookupWriter keys) {
Index: src/uk/me/parabola/splitter/disk/RelationStoreWriter.java
===================================================================
--- src/uk/me/parabola/splitter/disk/RelationStoreWriter.java	(revision 97)
+++ src/uk/me/parabola/splitter/disk/RelationStoreWriter.java	(working copy)
@@ -12,6 +12,7 @@
  */
 package uk.me.parabola.splitter.disk;
 
+import java.io.BufferedOutputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.OutputStream;
@@ -23,7 +24,7 @@
 	private final KeyLookupWriter roles;
 
 	public RelationStoreWriter(String filename) throws IOException {
-		this(new FileOutputStream(filename), new KeyLookupWriter(filename + ".keys"), new KeyLookupWriter(filename + ".roles"));
+		this(new BufferedOutputStream(new FileOutputStream(filename),10240), new KeyLookupWriter(filename + ".keys"), new KeyLookupWriter(filename + ".roles"));
 	}
 
 	public RelationStoreWriter(OutputStream out, KeyLookupWriter keys, KeyLookupWriter roles) {
_______________________________________________
mkgmap-dev mailing list
[email protected]
http://www.mkgmap.org.uk/mailman/listinfo/mkgmap-dev

Reply via email to