Skip to content

opsnoopop/api_dotnetcore_mysql

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

.NET Core API with MySQL

A simple .NET Core API application and MySQL, containerized with Docker.

Technology Stack

.NET Core Container: FROM mcr.microsoft.com/dotnet/sdk:8.0

  • OS Debian GNU/Linux 12 (bookworm)
  • .NET Core: aspnet:8.0 # Build mcr.microsoft.com/dotnet/sdk:8.0, Runtime mcr.microsoft.com/dotnet/aspnet:8.0
  • MySqlConnector: 2.3.7

MySQL Container: FROM mysql:8.4.5

  • OS Oracle Linux Server: 9.6
  • MySQL: 8.4.5

Adminer Container: FROM adminer:5-standalone

  • OS Alpine Linux: 3.22.1
  • Adminer: 5.3.0

Grafana/k6 Container: FROM grafana/k6:1.1.0

  • OS Alpine Linux: 3.22.0
  • Grafana/k6: 1.1.0

Getting Started

1. Clone the Repository

git clone https://github.com/opsnoopop/api_dotnetcore_mysql.git

2. Navigate to Project Directory

cd api_dotnetcore_mysql

3. Start the Application

docker compose up -d --build

4. Create table users

docker exec -i container_mysql mysql -u'testuser' -p'testpass' testdb -e "
CREATE TABLE IF NOT EXISTS testdb.users (
  user_id INT NOT NULL AUTO_INCREMENT ,
  username VARCHAR(50) NOT NULL ,
  email VARCHAR(100) NOT NULL ,
  created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ,
  PRIMARY KEY (user_id)
) ENGINE = InnoDB;"

API Endpoints

Health Check

curl -X GET http://localhost/

Create user

curl -X POST http://localhost/users -H 'Content-Type: application/json' -d '{"username":"optest","email":"opsnoopop@hotmail.com"}'

Get user

curl -X GET http://localhost/users/1

Test Performance by sysbench

sysbench e.g.

step 1 prepare
step 2 run test someting
step 3 cleanup

sysbench \
...
oltp_read_write prepare; # step 1 prepare สร้าง table

sysbench \
...
oltp_read_write run;     # step 2 run test อ่าน เขียน พร้อมกัน

sysbench \
...
oltp_read_only run;      # step 2 run test อ่าน อย่างเดียว

sysbench \
...
oltp_write_only run;     # step 2 run test เขียน อย่างเดียว

sysbench \
...
oltp_update_index run;   # step 2 run test update index

sysbench \
...
oltp_point_select run;   # step 2 run test query แบบเลือก row เดียว

sysbench \
...
oltp_delete run;         # step 2 run test delete rows

sysbench \
...
oltp_read_write cleanup; # step 3 cleanup ลบ table

sysbench step 1 prepare

docker run \
--name container_sysbench \
--rm \
-it \
--network global_optest \
opsnoopop/ubuntu:24.04 \
sysbench \
--threads=2 \
--time=10 \
--db-driver="mysql" \
--mysql-host="container_mysql" \
--mysql-port=3306 \
--mysql-user="testuser" \
--mysql-password="testpass" \
--mysql-db="testdb" \
--tables=10 \
--table-size=100000 \
oltp_read_write prepare;

sysbench step 2 run test

docker run \
--name container_sysbench \
--rm \
-it \
--network global_optest \
-v ./sysbench/:/sysbench/ \
opsnoopop/ubuntu:24.04 \
sysbench \
--threads=2 \
--time=10 \
--db-driver="mysql" \
--mysql-host="container_mysql" \
--mysql-port=3306 \
--mysql-user="testuser" \
--mysql-password="testpass" \
--mysql-db="testdb" \
--tables=10 \
--table-size=100000 \
oltp_read_write run > ./sysbench/sysbench_raw_$(date +"%Y%m%d_%H%M%S").txt

sysbench step 3 cleanup

docker run \
--name container_sysbench \
--rm \
-it \
--network global_optest \
opsnoopop/ubuntu:24.04 \
sysbench \
--threads=2 \
--time=10 \
--db-driver="mysql" \
--mysql-host="container_mysql" \
--mysql-port=3306 \
--mysql-user="testuser" \
--mysql-password="testpass" \
--mysql-db="testdb" \
--tables=10 \
--table-size=100000 \
oltp_read_write cleanup;

Test Performance by grafana/k6

grafana/k6 test Health Check

docker run \
--name container_k6 \
--rm \
-it \
--network global_optest \
-v ./k6/:/k6/ \
grafana/k6:1.1.0 \
run /k6/k6_1_ramping_health_check.js

grafana/k6 test Insert Create user

docker run \
--name container_k6 \
--rm \
-it \
--network global_optest \
-v ./k6/:/k6/ \
grafana/k6:1.1.0 \
run /k6/k6_2_ramping_create_user.js

grafana/k6 test Select Get user by id

docker run \
--name container_k6 \
--rm \
-it \
--network global_optest \
-v ./k6/:/k6/ \
grafana/k6:1.1.0 \
run /k6/k6_3_ramping_get_user_by_id.js

Test Performance by wrk

wrk test Health Check

docker run \
--name container_wrk \
--rm \
-it \
--network global_optest \
-v ./wrk/:/wrk/ \
opsnoopop/ubuntu:24.04 \
wrk -c1000 -t2 -d10s http://172.16.0.11:3000

wrk test Insert Create user

docker run \
--name container_wrk \
--rm \
-it \
--network global_optest \
-v ./wrk/:/wrk/ \
opsnoopop/ubuntu:24.04 \
wrk -c1000 -t2 -d10s -s /wrk/create_user.lua http://172.16.0.11:3000/users

wrk test Select Get user by id

docker run \
--name container_wrk \
--rm \
-it \
--network global_optest \
-v ./wrk/:/wrk/ \
opsnoopop/ubuntu:24.04 \
wrk -c1000 -t2 -d10s http://172.16.0.11:3000/users/1

Stop the Application

Truncate table users

docker exec -i container_mysql mysql -u'testuser' -p'testpass' testdb -e "
Truncate testdb.users;"

Delete table users

docker exec -i container_mysql mysql -u'testuser' -p'testpass' testdb -e "
DELETE FROM testdb.users;"

Stop the Application

docker compose down

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published