Skip to content

Instantly share code, notes, and snippets.

@kushti
Created August 19, 2017 07:48
Show Gist options
  • Save kushti/b3ebe2af75a95aed9aaae86db6c5f6f5 to your computer and use it in GitHub Desktop.
Save kushti/b3ebe2af75a95aed9aaae86db6c5f6f5 to your computer and use it in GitHub Desktop.
MptBench.scala
object MptBench extends App {
val dbPath = Files.createTempDirectory("testdb").toAbsolutePath.toString
val dataSource = LevelDBDataSource(new LevelDbConfig {
override val verifyChecksums: Boolean = false
override val paranoidChecks: Boolean = false
override val createIfMissing: Boolean = true
override val path: String = dbPath
})
try {
val hashFn = kec256(_: Array[Byte])
val ns = new ArchiveNodeStorage(new NodeStorage(dataSource))
val EmptyTrie = MerklePatriciaTrie[Array[Byte], Array[Byte]](ns, hashFn)
var t = System.currentTimeMillis()
(1 to 20000000).foldLeft(EmptyTrie){case (trie, i) =>
val k = hashFn(("hello" + i).getBytes)
val v = hashFn(("world" + i).getBytes)
if (i % 100000 == 0) {
val newT = System.currentTimeMillis()
val delta = (newT - t) / 1000.0
t = newT
println(s"=== $i elements put, time for batch is: $delta sec")
}
trie.put(k, v)
}
} finally {
val dir = new File(dbPath)
!dir.exists() || dir.delete()
}
}
/*
=== 100000 elements put, time for batch is: 48.951 sec
=== 200000 elements put, time for batch is: 75.393 sec
=== 300000 elements put, time for batch is: 98.324 sec
=== 400000 elements put, time for batch is: 109.106 sec
=== 500000 elements put, time for batch is: 156.889 sec
=== 600000 elements put, time for batch is: 138.847 sec
=== 700000 elements put, time for batch is: 186.155 sec
=== 800000 elements put, time for batch is: 171.507 sec
=== 900000 elements put, time for batch is: 162.959 sec
=== 1000000 elements put, time for batch is: 198.208 sec
=== 1100000 elements put, time for batch is: 219.322 sec
=== 1200000 elements put, time for batch is: 212.04 sec
=== 1300000 elements put, time for batch is: 218.092 sec
=== 1400000 elements put, time for batch is: 231.937 sec
=== 1500000 elements put, time for batch is: 242.701 sec
=== 1600000 elements put, time for batch is: 171.337 sec
=== 1700000 elements put, time for batch is: 254.583 sec
=== 1800000 elements put, time for batch is: 199.0 sec
=== 1900000 elements put, time for batch is: 224.389 sec
=== 2000000 elements put, time for batch is: 282.309 sec
=== 2100000 elements put, time for batch is: 219.739 sec
=== 2200000 elements put, time for batch is: 338.911 sec
=== 2300000 elements put, time for batch is: 454.703 sec
=== 2400000 elements put, time for batch is: 484.253 sec
=== 2500000 elements put, time for batch is: 467.943 sec
=== 2600000 elements put, time for batch is: 477.537 sec
=== 2700000 elements put, time for batch is: 693.232 sec
=== 2800000 elements put, time for batch is: 640.633 sec
=== 2900000 elements put, time for batch is: 598.214 sec
=== 3000000 elements put, time for batch is: 831.93 sec
=== 3100000 elements put, time for batch is: 1049.654 sec
=== 3200000 elements put, time for batch is: 678.725 sec
=== 3300000 elements put, time for batch is: 452.85 sec
=== 3400000 elements put, time for batch is: 483.753 sec
=== 3500000 elements put, time for batch is: 481.295 sec
=== 3600000 elements put, time for batch is: 530.019 sec
=== 3700000 elements put, time for batch is: 511.661 sec
=== 3800000 elements put, time for batch is: 556.845 sec
=== 3900000 elements put, time for batch is: 623.073 sec
=== 4000000 elements put, time for batch is: 693.388 sec
=== 4100000 elements put, time for batch is: 737.724 sec
=== 4200000 elements put, time for batch is: 817.957 sec
=== 4300000 elements put, time for batch is: 794.104 sec
=== 4400000 elements put, time for batch is: 839.309 sec
=== 4500000 elements put, time for batch is: 867.375 sec
=== 4600000 elements put, time for batch is: 800.932 sec
=== 4700000 elements put, time for batch is: 790.252 sec
=== 4800000 elements put, time for batch is: 961.278 sec
=== 4900000 elements put, time for batch is: 958.405 sec
=== 5000000 elements put, time for batch is: 978.193 sec
=== 5100000 elements put, time for batch is: 1061.059 sec
=== 5200000 elements put, time for batch is: 1010.153 sec
=== 5300000 elements put, time for batch is: 931.861 sec
=== 5400000 elements put, time for batch is: 903.798 sec
=== 5500000 elements put, time for batch is: 1016.238 sec
=== 5600000 elements put, time for batch is: 1177.373 sec
=== 5700000 elements put, time for batch is: 1440.37 sec
=== 5800000 elements put, time for batch is: 1306.17 sec
=== 5900000 elements put, time for batch is: 1096.787 sec
=== 6000000 elements put, time for batch is: 1041.966 sec
=== 6100000 elements put, time for batch is: 1012.737 sec
=== 6200000 elements put, time for batch is: 1093.467 sec
=== 6300000 elements put, time for batch is: 1251.618 sec
=== 6400000 elements put, time for batch is: 1290.693 sec
=== 6500000 elements put, time for batch is: 1257.63 sec
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment