Skip to content

Commit

Permalink
Add prepare statement lru + hack insertMany for mariaDB
Browse files Browse the repository at this point in the history
  • Loading branch information
kefniark committed Sep 5, 2024
1 parent b6970a5 commit dce4035
Show file tree
Hide file tree
Showing 27 changed files with 844 additions and 357 deletions.
35 changes: 31 additions & 4 deletions cmd/bench/bench.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"bufio"
"fmt"
"os"
"slices"
"strconv"
"strings"

Expand Down Expand Up @@ -62,6 +63,11 @@ func parseBenchmarks() []BenchData {
return entries
}

type BenchSeries struct {
Name string
Data []opts.LineData
}

type BenchData struct {
Suite string
Name string
Expand Down Expand Up @@ -125,14 +131,19 @@ func generateInsertManyCPULines(data []BenchData, name string, filter string) *c
)
line.SetXAxis([]string{"10", "25", "50", "100", "250", "500"})

seriesData := []BenchSeries{}
for k, v := range entries {
if !strings.Contains(k, filter) {
continue
}

line.AddSeries(strings.ReplaceAll(k, filter, ""), generateLineSpeedData(v, name))
seriesData = append(seriesData, BenchSeries{
Name: strings.ReplaceAll(k, filter, ""),
Data: generateLineSpeedData(v, name),
})
}

drawLines(seriesData, line)

return line
}

Expand All @@ -153,20 +164,36 @@ func generateInsertManyAllocLines(data []BenchData, name string, filter string)
)
line.SetXAxis([]string{"10", "25", "50", "100", "250", "500"})

seriesData := []BenchSeries{}
for k, v := range entries {
if !strings.Contains(k, filter) {
continue
}
line.AddSeries(strings.ReplaceAll(k, filter, ""), generateLineAllocData(v, name))
seriesData = append(seriesData, BenchSeries{
Name: strings.ReplaceAll(k, filter, ""),
Data: generateLineAllocData(v, name),
})
}

drawLines(seriesData, line)

return line
}

func drawLines(seriesData []BenchSeries, line *charts.Line) {
slices.SortFunc(seriesData, func(a, b BenchSeries) int {
return strings.Compare(a.Name, b.Name)
})

for _, v := range seriesData {
line.AddSeries(v.Name, v.Data)
}
}

func main() {
data := parseBenchmarks()

for _, db := range []string{"Postgres", "SQLite"} {
for _, db := range []string{"Postgres", "SQLite", "MariaDB"} {
for _, op := range []string{"InsertMany", "FindMany"} {
f1, _ := os.Create(fmt.Sprintf("docs/public/bench_%s_%s_cpu.html", strings.ToLower(db), strings.ToLower(op)))
defer f1.Close()
Expand Down
24 changes: 12 additions & 12 deletions devenv.lock
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@
"devenv": {
"locked": {
"dir": "src/modules",
"lastModified": 1724763216,
"lastModified": 1725464985,
"owner": "cachix",
"repo": "devenv",
"rev": "1e4ef61205b9aa20fe04bf1c468b6a316281c4f1",
"treeHash": "5a8fdb7f5c9a192415fb9f16b950bbd0c9ea5f95",
"rev": "325588271687d275632958b4c988ef7a05772f65",
"treeHash": "a85a79c0941bff354a040b6d17fe1f542a661ed1",
"type": "github"
},
"original": {
Expand Down Expand Up @@ -72,11 +72,11 @@
},
"nixpkgs-stable": {
"locked": {
"lastModified": 1724531977,
"lastModified": 1725407940,
"owner": "NixOS",
"repo": "nixpkgs",
"rev": "2527da1ef492c495d5391f3bcf9c1dd9f4514e32",
"treeHash": "d14102f174ee3125e8b0167d5edd69202147f6f4",
"rev": "6f6c45b5134a8ee2e465164811e451dcb5ad86e3",
"treeHash": "f65d5344b23cfbe3695140b602bc463349b26638",
"type": "github"
},
"original": {
Expand All @@ -88,11 +88,11 @@
},
"nixpkgs-unstable": {
"locked": {
"lastModified": 1724479785,
"lastModified": 1725103162,
"owner": "nixos",
"repo": "nixpkgs",
"rev": "d0e1602ddde669d5beb01aec49d71a51937ed7be",
"treeHash": "79464de14ea14ded4fd827be538729d4c6d6b09d",
"rev": "12228ff1752d7b7624a54e9c1af4b222b3c1073b",
"treeHash": "d8cc3c37ece87a2f965f4749978f64552871c243",
"type": "github"
},
"original": {
Expand All @@ -112,11 +112,11 @@
"nixpkgs-stable": "nixpkgs-stable"
},
"locked": {
"lastModified": 1724837688,
"lastModified": 1725513492,
"owner": "cachix",
"repo": "pre-commit-hooks.nix",
"rev": "e4b258096adade1daed37f732c343d1b5374dfae",
"treeHash": "a4fb93ad9285f7872144df5395150475620b8f40",
"rev": "7570de7b9b504cfe92025dd1be797bf546f66528",
"treeHash": "4b46d77870afecd8f642541cb4f4927326343b59",
"type": "github"
},
"original": {
Expand Down
43 changes: 42 additions & 1 deletion docs/bench/bench.md
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,45 @@ Tested in `:memory:` mode
<iframe :src="withBase('/bench_sqlite_insertmany_alloc.html')" width=576 height=320 frameBorder="0" scrolling="no"/>
<iframe :src="withBase('/bench_sqlite_findmany_alloc.html')" width=576 height=320 frameBorder="0" scrolling="no"/>
<iframe :src="withBase('/bench_sqlite_findmany_alloc.html')" width=576 height=320 frameBorder="0" scrolling="no"/>
---
## MariaDB
::: info
Library Tested:
* MangoSQL with go-sql-driver
* [Gorm](https://gorm.io/) with gorm sqlite driver
:::
### CPU (Operation per second)
::: tip Axis
**Horizontal:** Size of payload (number of items)
**Vertical:** Converted ns/op -> op/s, to get unit easier to visualize
:::
<iframe :src="withBase('/bench_mariadb_insertmany_cpu.html')" width=576 height=320 frameBorder="0" scrolling="no" />
<iframe :src="withBase('/bench_mariadb_findmany_cpu.html')" width=576 height=320 frameBorder="0" scrolling="no" />
### Memory Allocation
::: tip Axis
**Horizontal:** Size of payload (number of items)
**Vertical:** Go bench alloc/op
:::
<iframe :src="withBase('/bench_mariadb_insertmany_alloc.html')" width=576 height=320 frameBorder="0" scrolling="no"/>
<iframe :src="withBase('/bench_mariadb_findmany_alloc.html')" width=576 height=320 frameBorder="0" scrolling="no"/>
25 changes: 25 additions & 0 deletions docs/public/bench_mariadb_findmany_alloc.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Awesome go-echarts</title>
<script src="https://go-echarts.github.io/go-echarts-assets/assets/echarts.min.js"></script>
<script src="https://go-echarts.github.io/go-echarts-assets/assets/themes/shine.js"></script>
</head>

<body><div class="container">
<div class="item" id="FIjKxKNEVPWh" style="width:576px;height:320px;"></div>
</div><script type="text/javascript">
"use strict";
let goecharts_FIjKxKNEVPWh = echarts.init(document.getElementById('FIjKxKNEVPWh'), "shine", { renderer: "canvas" });
let option_FIjKxKNEVPWh = {"legend":{},"series":[{"name":"Gorm","type":"line","data":[{"value":111},{"value":324},{"value":669},{"value":1248},{"value":2401},{"value":5861},{"value":12111},{"value":900},{"value":310},{"value":673},{"value":1275},{"value":2479},{"value":6089},{"value":12103}]},{"name":"Mango","type":"line","data":[{"value":47},{"value":167},{"value":363},{"value":689},{"value":1344},{"value":3299},{"value":7085},{"value":1240},{"value":254},{"value":481},{"value":857},{"value":1608},{"value":3863},{"value":7618}]}],"title":{"text":"FindMany|Mem","subtext":"Lower is Better (allocs/op)"},"toolbox":{},"tooltip":{},"xAxis":[{"data":["10","25","50","100","250","500"]}],"yAxis":[{}]}

goecharts_FIjKxKNEVPWh.setOption(option_FIjKxKNEVPWh);
</script>
<style>
.container {margin-top:30px; display: flex;justify-content: center;align-items: center;}
.item {margin: auto;}
</style>
</body>
</html>
25 changes: 25 additions & 0 deletions docs/public/bench_mariadb_findmany_cpu.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Awesome go-echarts</title>
<script src="https://go-echarts.github.io/go-echarts-assets/assets/echarts.min.js"></script>
<script src="https://go-echarts.github.io/go-echarts-assets/assets/themes/shine.js"></script>
</head>

<body><div class="container">
<div class="item" id="PzZNiNngTAqQ" style="width:576px;height:320px;"></div>
</div><script type="text/javascript">
"use strict";
let goecharts_PzZNiNngTAqQ = echarts.init(document.getElementById('PzZNiNngTAqQ'), "shine", { renderer: "canvas" });
let option_PzZNiNngTAqQ = {"legend":{},"series":[{"name":"Gorm","type":"line","data":[{"value":299},{"value":252},{"value":263},{"value":229},{"value":186},{"value":124},{"value":87},{"value":348},{"value":2693},{"value":2042},{"value":1490},{"value":973},{"value":423},{"value":196}]},{"name":"Mango","type":"line","data":[{"value":330},{"value":319},{"value":305},{"value":280},{"value":243},{"value":156},{"value":86},{"value":633},{"value":4940},{"value":3574},{"value":2499},{"value":1502},{"value":662},{"value":374}]}],"title":{"text":"FindMany|CPU","subtext":"Higher is Better (op/s)"},"toolbox":{},"tooltip":{},"xAxis":[{"data":["10","25","50","100","250","500"]}],"yAxis":[{}]}

goecharts_PzZNiNngTAqQ.setOption(option_PzZNiNngTAqQ);
</script>
<style>
.container {margin-top:30px; display: flex;justify-content: center;align-items: center;}
.item {margin: auto;}
</style>
</body>
</html>
25 changes: 25 additions & 0 deletions docs/public/bench_mariadb_insertmany_alloc.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Awesome go-echarts</title>
<script src="https://go-echarts.github.io/go-echarts-assets/assets/echarts.min.js"></script>
<script src="https://go-echarts.github.io/go-echarts-assets/assets/themes/shine.js"></script>
</head>

<body><div class="container">
<div class="item" id="ddUqTjwhKnXr" style="width:576px;height:320px;"></div>
</div><script type="text/javascript">
"use strict";
let goecharts_ddUqTjwhKnXr = echarts.init(document.getElementById('ddUqTjwhKnXr'), "shine", { renderer: "canvas" });
let option_ddUqTjwhKnXr = {"legend":{},"series":[{"name":"Gorm","type":"line","data":[{"value":111},{"value":324},{"value":669},{"value":1248},{"value":2401},{"value":5861},{"value":12111},{"value":900},{"value":310},{"value":673},{"value":1275},{"value":2479},{"value":6089},{"value":12103}]},{"name":"Mango","type":"line","data":[{"value":47},{"value":167},{"value":363},{"value":689},{"value":1344},{"value":3299},{"value":7085},{"value":1240},{"value":254},{"value":481},{"value":857},{"value":1608},{"value":3863},{"value":7618}]}],"title":{"text":"InsertMany|Mem","subtext":"Lower is Better (allocs/op)"},"toolbox":{},"tooltip":{},"xAxis":[{"data":["10","25","50","100","250","500"]}],"yAxis":[{}]}

goecharts_ddUqTjwhKnXr.setOption(option_ddUqTjwhKnXr);
</script>
<style>
.container {margin-top:30px; display: flex;justify-content: center;align-items: center;}
.item {margin: auto;}
</style>
</body>
</html>
25 changes: 25 additions & 0 deletions docs/public/bench_mariadb_insertmany_cpu.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Awesome go-echarts</title>
<script src="https://go-echarts.github.io/go-echarts-assets/assets/echarts.min.js"></script>
<script src="https://go-echarts.github.io/go-echarts-assets/assets/themes/shine.js"></script>
</head>

<body><div class="container">
<div class="item" id="BubGNFKiAdCt" style="width:576px;height:320px;"></div>
</div><script type="text/javascript">
"use strict";
let goecharts_BubGNFKiAdCt = echarts.init(document.getElementById('BubGNFKiAdCt'), "shine", { renderer: "canvas" });
let option_BubGNFKiAdCt = {"legend":{},"series":[{"name":"Gorm","type":"line","data":[{"value":299},{"value":252},{"value":263},{"value":229},{"value":186},{"value":124},{"value":87},{"value":348},{"value":2693},{"value":2042},{"value":1490},{"value":973},{"value":423},{"value":196}]},{"name":"Mango","type":"line","data":[{"value":330},{"value":319},{"value":305},{"value":280},{"value":243},{"value":156},{"value":86},{"value":633},{"value":4940},{"value":3574},{"value":2499},{"value":1502},{"value":662},{"value":374}]}],"title":{"text":"InsertMany|CPU","subtext":"Higher is Better (op/s)"},"toolbox":{},"tooltip":{},"xAxis":[{"data":["10","25","50","100","250","500"]}],"yAxis":[{}]}

goecharts_BubGNFKiAdCt.setOption(option_BubGNFKiAdCt);
</script>
<style>
.container {margin-top:30px; display: flex;justify-content: center;align-items: center;}
.item {margin: auto;}
</style>
</body>
</html>
8 changes: 4 additions & 4 deletions docs/public/bench_postgres_findmany_alloc.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
</head>

<body><div class="container">
<div class="item" id="TRAdUQiMONGF" style="width:576px;height:320px;"></div>
<div class="item" id="EPBGywCkUQbE" style="width:576px;height:320px;"></div>
</div><script type="text/javascript">
"use strict";
let goecharts_TRAdUQiMONGF = echarts.init(document.getElementById('TRAdUQiMONGF'), "shine", { renderer: "canvas" });
let option_TRAdUQiMONGF = {"legend":{},"series":[{"name":"MangoPGX","type":"line","data":[{"value":41},{"value":101},{"value":222},{"value":423},{"value":824},{"value":2026},{"value":4539},{"value":1220},{"value":336},{"value":657},{"value":1189},{"value":2243},{"value":5403},{"value":10662}]},{"name":"MangoPQ","type":"line","data":[{"value":41},{"value":120},{"value":256},{"value":482},{"value":933},{"value":2285},{"value":5056},{"value":1210},{"value":294},{"value":581},{"value":1058},{"value":2009},{"value":4863},{"value":9617}]},{"name":"GormPGX","type":"line","data":[{"value":122},{"value":475},{"value":1107},{"value":2213},{"value":4425},{"value":11039},{"value":22542},{"value":1100},{"value":447},{"value":1007},{"value":1939},{"value":3803},{"value":9521},{"value":19036}]}],"title":{"text":"FindMany|Mem","subtext":"Lower is Better (allocs/op)"},"toolbox":{},"tooltip":{},"xAxis":[{"data":["10","25","50","100","250","500"]}],"yAxis":[{}]}
let goecharts_EPBGywCkUQbE = echarts.init(document.getElementById('EPBGywCkUQbE'), "shine", { renderer: "canvas" });
let option_EPBGywCkUQbE = {"legend":{},"series":[{"name":"GormPGX","type":"line","data":[{"value":122},{"value":475},{"value":1107},{"value":2213},{"value":4425},{"value":11039},{"value":22540},{"value":1100},{"value":447},{"value":1007},{"value":1939},{"value":3804},{"value":9521},{"value":19038}]},{"name":"MangoPGX","type":"line","data":[{"value":41},{"value":101},{"value":222},{"value":423},{"value":824},{"value":2026},{"value":4540},{"value":1220},{"value":336},{"value":657},{"value":1189},{"value":2243},{"value":5403},{"value":10661}]},{"name":"MangoPQ","type":"line","data":[{"value":41},{"value":120},{"value":256},{"value":482},{"value":933},{"value":2285},{"value":5056},{"value":1210},{"value":294},{"value":581},{"value":1058},{"value":2009},{"value":4863},{"value":9617}]}],"title":{"text":"FindMany|Mem","subtext":"Lower is Better (allocs/op)"},"toolbox":{},"tooltip":{},"xAxis":[{"data":["10","25","50","100","250","500"]}],"yAxis":[{}]}

goecharts_TRAdUQiMONGF.setOption(option_TRAdUQiMONGF);
goecharts_EPBGywCkUQbE.setOption(option_EPBGywCkUQbE);
</script>
<style>
.container {margin-top:30px; display: flex;justify-content: center;align-items: center;}
Expand Down
8 changes: 4 additions & 4 deletions docs/public/bench_postgres_findmany_cpu.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
</head>

<body><div class="container">
<div class="item" id="IGERKvSkQmPY" style="width:576px;height:320px;"></div>
<div class="item" id="JdaJGEGfHDQI" style="width:576px;height:320px;"></div>
</div><script type="text/javascript">
"use strict";
let goecharts_IGERKvSkQmPY = echarts.init(document.getElementById('IGERKvSkQmPY'), "shine", { renderer: "canvas" });
let option_IGERKvSkQmPY = {"legend":{},"series":[{"name":"MangoPGX","type":"line","data":[{"value":6494},{"value":4802},{"value":3277},{"value":2111},{"value":1152},{"value":453},{"value":223},{"value":649},{"value":4769},{"value":3589},{"value":2435},{"value":1481},{"value":650},{"value":310}]},{"name":"MangoPQ","type":"line","data":[{"value":7055},{"value":5049},{"value":3233},{"value":2133},{"value":1162},{"value":472},{"value":231},{"value":727},{"value":5599},{"value":3746},{"value":2472},{"value":1585},{"value":702},{"value":292}]},{"name":"GormPGX","type":"line","data":[{"value":2492},{"value":1880},{"value":1360},{"value":1006},{"value":566},{"value":216},{"value":122},{"value":620},{"value":4232},{"value":2991},{"value":1918},{"value":992},{"value":395},{"value":192}]}],"title":{"text":"FindMany|CPU","subtext":"Higher is Better (op/s)"},"toolbox":{},"tooltip":{},"xAxis":[{"data":["10","25","50","100","250","500"]}],"yAxis":[{}]}
let goecharts_JdaJGEGfHDQI = echarts.init(document.getElementById('JdaJGEGfHDQI'), "shine", { renderer: "canvas" });
let option_JdaJGEGfHDQI = {"legend":{},"series":[{"name":"GormPGX","type":"line","data":[{"value":2436},{"value":1928},{"value":1342},{"value":962},{"value":561},{"value":215},{"value":127},{"value":643},{"value":4495},{"value":2923},{"value":1887},{"value":1048},{"value":410},{"value":202}]},{"name":"MangoPGX","type":"line","data":[{"value":6462},{"value":4746},{"value":3139},{"value":2118},{"value":1174},{"value":463},{"value":228},{"value":673},{"value":4944},{"value":3605},{"value":2462},{"value":1535},{"value":663},{"value":306}]},{"name":"MangoPQ","type":"line","data":[{"value":7469},{"value":4943},{"value":3260},{"value":1987},{"value":1189},{"value":483},{"value":233},{"value":756},{"value":5302},{"value":3904},{"value":2513},{"value":1493},{"value":729},{"value":293}]}],"title":{"text":"FindMany|CPU","subtext":"Higher is Better (op/s)"},"toolbox":{},"tooltip":{},"xAxis":[{"data":["10","25","50","100","250","500"]}],"yAxis":[{}]}

goecharts_IGERKvSkQmPY.setOption(option_IGERKvSkQmPY);
goecharts_JdaJGEGfHDQI.setOption(option_JdaJGEGfHDQI);
</script>
<style>
.container {margin-top:30px; display: flex;justify-content: center;align-items: center;}
Expand Down
8 changes: 4 additions & 4 deletions docs/public/bench_postgres_insertmany_alloc.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@
</head>

<body><div class="container">
<div class="item" id="tFCUHpwBWCnT" style="width:576px;height:320px;"></div>
<div class="item" id="uTVSxLBTJwEW" style="width:576px;height:320px;"></div>
</div><script type="text/javascript">
"use strict";
let goecharts_tFCUHpwBWCnT = echarts.init(document.getElementById('tFCUHpwBWCnT'), "shine", { renderer: "canvas" });
let option_tFCUHpwBWCnT = {"legend":{},"series":[{"name":"GormPGX","type":"line","data":[{"value":122},{"value":475},{"value":1107},{"value":2213},{"value":4425},{"value":11039},{"value":22542},{"value":1100},{"value":447},{"value":1007},{"value":1939},{"value":3803},{"value":9521},{"value":19036}]},{"name":"MangoPGX","type":"line","data":[{"value":41},{"value":101},{"value":222},{"value":423},{"value":824},{"value":2026},{"value":4539},{"value":1220},{"value":336},{"value":657},{"value":1189},{"value":2243},{"value":5403},{"value":10662}]},{"name":"MangoPQ","type":"line","data":[{"value":41},{"value":120},{"value":256},{"value":482},{"value":933},{"value":2285},{"value":5056},{"value":1210},{"value":294},{"value":581},{"value":1058},{"value":2009},{"value":4863},{"value":9617}]}],"title":{"text":"InsertMany|Mem","subtext":"Lower is Better (allocs/op)"},"toolbox":{},"tooltip":{},"xAxis":[{"data":["10","25","50","100","250","500"]}],"yAxis":[{}]}
let goecharts_uTVSxLBTJwEW = echarts.init(document.getElementById('uTVSxLBTJwEW'), "shine", { renderer: "canvas" });
let option_uTVSxLBTJwEW = {"legend":{},"series":[{"name":"GormPGX","type":"line","data":[{"value":122},{"value":475},{"value":1107},{"value":2213},{"value":4425},{"value":11039},{"value":22540},{"value":1100},{"value":447},{"value":1007},{"value":1939},{"value":3804},{"value":9521},{"value":19038}]},{"name":"MangoPGX","type":"line","data":[{"value":41},{"value":101},{"value":222},{"value":423},{"value":824},{"value":2026},{"value":4540},{"value":1220},{"value":336},{"value":657},{"value":1189},{"value":2243},{"value":5403},{"value":10661}]},{"name":"MangoPQ","type":"line","data":[{"value":41},{"value":120},{"value":256},{"value":482},{"value":933},{"value":2285},{"value":5056},{"value":1210},{"value":294},{"value":581},{"value":1058},{"value":2009},{"value":4863},{"value":9617}]}],"title":{"text":"InsertMany|Mem","subtext":"Lower is Better (allocs/op)"},"toolbox":{},"tooltip":{},"xAxis":[{"data":["10","25","50","100","250","500"]}],"yAxis":[{}]}

goecharts_tFCUHpwBWCnT.setOption(option_tFCUHpwBWCnT);
goecharts_uTVSxLBTJwEW.setOption(option_uTVSxLBTJwEW);
</script>
<style>
.container {margin-top:30px; display: flex;justify-content: center;align-items: center;}
Expand Down
Loading

0 comments on commit dce4035

Please sign in to comment.