Paper: a few more graphs.

toying-with-ramdb
Philippe PITTOLI 2024-05-28 06:31:50 +02:00
parent 5f4977ddd1
commit 42967edd9f
6 changed files with 115 additions and 9 deletions

View File

@ -1,8 +1,8 @@
.G1
copy "legend.grap"
frame invis ht 3 wid 4 left solid bot solid
coord y 0,500
ticks left out from 0 to 500 by 50
coord y 0,300
ticks left out from 0 to 300 by 50
ticks bot out at 50000 "50,000", 100000 "100,000", 150000 "150,000", 200000 "200,000", 250000 "250,000"
label left "Request duration with" unaligned "an index (ns)" "(Median)" left 0.8
@ -11,10 +11,10 @@ label bot "Number of cars in the database" down 0.1
obfifo1 = obfifo5 = obfifo10 = obfifo20 = 0 # old bullets
cbfifo1 = cbfifo5 = cbfifo10 = cbfifo20 = 0 # current bullets
legendxleft = 180000
legendxright = 240000
legendyup = 400
legendydown = 300
legendxleft = 120000
legendxright = 180000
legendyup = 120
legendydown = 20
boite(legendxleft,legendxright,legendyup,legendydown)
legend_common(legendxleft,legendxright,legendyup,legendydown)

View File

@ -1,8 +1,9 @@
.G1
copy "legend.grap"
frame invis ht 3 wid 4 left solid bot solid
coord x 0,5000*2 y 0,5000
ticks left out from 0 to 5000 by 1000
coord x 0,5000*2 y 0,4000
ticks left out from 0 to 4000 by 400
ticks bot out from 1000 to 10000 by 1000
label left "Request duration" unaligned "for a partition (µs)" "(Median)" left 0.8
label bot "Number of cars matching the partition" down 0.1

View File

@ -0,0 +1,68 @@
.G1
copy "legend.grap"
frame invis ht 3 wid 4 left solid bot solid
coord x 0,5000 y 0,3000
ticks left out from 0 to 5000 by 200
ticks bot out from 1000 to 5000 by 1000
label left "Request duration" unaligned "for a tag (µs)" "(Median)" left 0.8
label bot "Number of cars matching the tag" down 0.1
obfifo1 = obfifo5 = obfifo10 = obfifo20 = 0
cbfifo1 = cbfifo5 = cbfifo10 = cbfifo20 = 0
legendxleft = 2000
legendxright = 3500
legendyup = 2500
legendydown = 1500
boite(legendxleft,legendxright,legendyup,legendydown)
legend_common(legendxleft,legendxright,legendyup,legendydown)
copy "../data/fifo_tags.d" thru X
cx = $1
y_scale = 1000
## fifo1 fifo5 fifo10 fifo20
#line from cx,$2/y_scale to cx,$4/y_scale
#line from cx,$5/y_scale to cx,$7/y_scale
#line from cx,$8/y_scale to cx,$10/y_scale
#line from cx,$11/y_scale to cx,$13/y_scale
#ty = $3
cbfifo1 = $3/y_scale
cbfifo5 = $6/y_scale
cbfifo10 = $9/y_scale
cbfifo20 = $12/y_scale
.gcolor red
if (obfifo1 > 0) then {line from cx,cbfifo1 to ox,obfifo1}
.gcolor
.gcolor green
if (obfifo5 > 0) then {line from cx,cbfifo5 to ox,obfifo5}
.gcolor
if (obfifo10 > 0) then {line from cx,cbfifo10 to ox,obfifo10}
.gcolor pink
if (obfifo20 > 0) then {line from cx,cbfifo20 to ox,obfifo20}
.gcolor
obfifo1 = cbfifo1
obfifo5 = cbfifo5
obfifo10 = cbfifo10
obfifo20 = cbfifo20
ox = cx
# fifo1 fifo5 fifo10 fifo20
.gcolor red
bullet at cx,cbfifo1
.gcolor
.gcolor green
bullet at cx,cbfifo5
.gcolor
bullet at cx,cbfifo10
.gcolor pink
bullet at cx,cbfifo20
.gcolor
X
.G2

View File

@ -3,6 +3,7 @@ copy "legend.grap"
frame invis ht 3 wid 4 left solid bot solid
coord x 0,5000*2 y 0,350
ticks left out from 0 to 350 by 50
ticks bot out from 1000 to 10000 by 1000
label left "Request duration" unaligned "for a partition (ms)" "(Median)" left 0.8
label bot "Number of cars matching the partition" down 0.1

View File

@ -3,6 +3,7 @@ copy "legend.grap"
frame invis ht 3 wid 4 left solid bot solid
coord x 0,5000 y 0,170
ticks left out from 0 to 170 by 20
ticks bot out from 1000 to 5000 by 1000
label left "Request duration" unaligned "for a tag (ms)" "(Median)" left 0.8
label bot "Number of cars matching the tag" down 0.1

View File

@ -39,6 +39,7 @@
.I \\$1 \\$2 \\$3
..
.
.
. \" The document starts here.
.
.TITLE Document Oriented DataBase (DODB)
@ -941,6 +942,9 @@ The experiment starts with a database containing 1,000 cars and goes up to 250,0
.ps -2
.so graph_query_index.grap
.ps \n[PS]
.QP
This first figure shows the request durations to retrieve data based on a basic index with a database containing up to 250k entries.
.QE
Since there is only one value to retrieve, the request is quick and time is almost constant.
When the value and the index are kept in memory (see \f[CW]RAM only\f[] and \f[CW]Cached db\f[]), the retrieval is almost instantaneous (about 50 to 120 ns).
@ -1045,10 +1049,41 @@ Since this implementation of DODB is related to the Crystal language (which isn'
.so graph_addition_fifo.grap
.ps \n[PS]
.APPENDIX Common database
.APPENDIX Common database performance
The
.I Common
database enables to configure the number of allowed entries in the cache.
The following figures show the performance of the common database depending on the cache size.
.ps -2
.so graph_fifo_query_index.grap
.ps \n[PS]
.QP
This first figure shows the request durations to retrieve data based on a basic index with a database containing up to 250k entries.
.QE
.EQ
delim $$
.EN
This figure shows a value being requested and since there is only a single value being requested in the test, it is immediately put in the cache and is never evicted.
For that reason, the result is stable amongst all
.I common
database instances:
.vp 2p
$+-$ 170 ns.
.EQ
delim off
.EN
.ps -2
.so graph_fifo_query_partition.grap
.ps \n[PS]
.QP
This first figure shows the request durations to retrieve data based on a partition containing up to 10k entries.
.QE
As we see in the figure, the duration for data retrieval grows almost linearly for databases with a sufficient cache size (starting with 10k entries).
When the cache size is not sufficient, the requests are hundred times slower, which explain why the database with a cache size of one thousand entries isn't even represented in the graph, and why the 5k database has great results up to 5k partitions.
.ps -2
.so graph_fifo_query_tag.grap
.ps \n[PS]
.QP
This first figure shows the request durations to retrieve data based on a tag containing up to 5k entries.
.QE