Skip to main content
Version: 1.5.1

MySQL

Relational Databasebackend/mysql

MySQL is the world's most popular open source relational database. It provides robust, scalable, and reliable data storage with full SQL support and ACID compliance for mission-critical applications.

📦 Installation

go get github.com/azrod/kivigo/backend/mysql

Requires a running MySQL server. You can use MySQL locally, MySQL in Docker, or cloud services like AWS RDS, Google Cloud SQL, or Azure Database for MySQL.

Dependencies

  • MySQL server (8.0 or later recommended)
  • MySQL database and table created
  • Valid connection credentials with appropriate permissions

✨ Features

Basic Operations
Batch Operations
Health Checks
ACID Transactions
SQL Queries
Indexing
Replication
Partitioning

🚀 Usage

package main

import (
"database/sql"
"time"

"github.com/azrod/kivigo"
"github.com/azrod/kivigo/backend/mysql"
)

func main() {
// Basic configuration
opt := mysql.NewOptions()
opt.DataSourceName = "user:password@tcp(localhost:3306)/kivigo?parseTime=true"
opt.TableName = "keyvalue"
opt.KeyColumn = "key_name"
opt.ValueColumn = "value_data"

// Advanced configuration with connection pool
advOpt := mysql.NewOptions()
advOpt.DataSourceName = "user:password@tcp(mysql-server:3306)/kivigo?charset=utf8mb4&parseTime=true&loc=Local"
advOpt.TableName = "kvstore"
advOpt.KeyColumn = "id"
advOpt.ValueColumn = "data"
advOpt.CreatedAtColumn = "created_at"
advOpt.UpdatedAtColumn = "updated_at"

// Optional: Configure connection pool
advOpt.MaxOpenConns = 25
advOpt.MaxIdleConns = 5
advOpt.ConnMaxLifetime = 300 * time.Second
advOpt.ConnMaxIdleTime = 60 * time.Second

// Optional: Enable prepared statements
advOpt.UsePreparedStatements = true

// Create backend
kvStore, err := mysql.New(advOpt)
if err != nil {
panic(err)
}
defer kvStore.Close()

// Create client
client, err := kivigo.New(kvStore)
if err != nil {
panic(err)
}
}

📝 Notes

  • Ensure proper indexing on key columns for optimal performance
  • Use connection pooling to handle concurrent requests efficiently
  • Consider using READ COMMITTED isolation level for most use cases
  • MySQL 8.0 introduces better JSON support for storing complex values
  • Monitor slow query log to identify performance bottlenecks
  • Use prepared statements to prevent SQL injection and improve performance
  • Consider partitioning large tables for better performance
  • Regular backups are essential for data persistence and disaster recovery

🔗 Additional Resources