From 42967edd9f2cf7bad20b045dd7ee31584b7391f3 Mon Sep 17 00:00:00 2001 From: Philippe PITTOLI Date: Tue, 28 May 2024 06:31:50 +0200 Subject: [PATCH] Paper: a few more graphs. --- paper/graph_fifo_query_index.grap | 12 ++--- paper/graph_fifo_query_partition.grap | 5 +- paper/graph_fifo_query_tag.grap | 68 +++++++++++++++++++++++++++ paper/graph_query_partition.grap | 1 + paper/graph_query_tag.grap | 1 + paper/paper.ms | 37 ++++++++++++++- 6 files changed, 115 insertions(+), 9 deletions(-) create mode 100644 paper/graph_fifo_query_tag.grap diff --git a/paper/graph_fifo_query_index.grap b/paper/graph_fifo_query_index.grap index 932493a..73d60a1 100644 --- a/paper/graph_fifo_query_index.grap +++ b/paper/graph_fifo_query_index.grap @@ -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) diff --git a/paper/graph_fifo_query_partition.grap b/paper/graph_fifo_query_partition.grap index 66748ce..09715ae 100644 --- a/paper/graph_fifo_query_partition.grap +++ b/paper/graph_fifo_query_partition.grap @@ -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 diff --git a/paper/graph_fifo_query_tag.grap b/paper/graph_fifo_query_tag.grap new file mode 100644 index 0000000..ce8843c --- /dev/null +++ b/paper/graph_fifo_query_tag.grap @@ -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 diff --git a/paper/graph_query_partition.grap b/paper/graph_query_partition.grap index 8bb765d..0c0e3a6 100644 --- a/paper/graph_query_partition.grap +++ b/paper/graph_query_partition.grap @@ -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 diff --git a/paper/graph_query_tag.grap b/paper/graph_query_tag.grap index d4efd86..fb38bc0 100644 --- a/paper/graph_query_tag.grap +++ b/paper/graph_query_tag.grap @@ -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 diff --git a/paper/paper.ms b/paper/paper.ms index 3d196d1..f3a93bc 100644 --- a/paper/paper.ms +++ b/paper/paper.ms @@ -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