mirror of
				https://github.com/TeaOSLab/EdgeAPI.git
				synced 2025-11-04 16:00:24 +08:00 
			
		
		
		
	优化数据库相关代码
This commit is contained in:
		@@ -3,6 +3,7 @@ package db
 | 
			
		||||
import (
 | 
			
		||||
	"database/sql"
 | 
			
		||||
	"database/sql/driver"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeAPI/internal/db/models"
 | 
			
		||||
	_ "github.com/go-sql-driver/mysql"
 | 
			
		||||
	"github.com/iwind/TeaGo/Tea"
 | 
			
		||||
	_ "github.com/iwind/TeaGo/bootstrap"
 | 
			
		||||
@@ -42,3 +43,13 @@ func TestDB_Instance(t *testing.T) {
 | 
			
		||||
	}
 | 
			
		||||
	time.Sleep(100 * time.Second)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestDB_Reuse(t *testing.T) {
 | 
			
		||||
	var dao = models.NewVersionDAO()
 | 
			
		||||
	for i := 0; i < 20_000; i++ {
 | 
			
		||||
		_, _, err := dao.Query(nil).Attr("version", i).Reuse(true).FindOne()
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Fatal(err)
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -237,7 +237,7 @@ func (this *DBNodeInitializer) loop() error {
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if db == nil {
 | 
			
		||||
			config := &dbs.DBConfig{
 | 
			
		||||
			var config = &dbs.DBConfig{
 | 
			
		||||
				Driver: "mysql",
 | 
			
		||||
				Dsn:    dsn,
 | 
			
		||||
				Prefix: "edge",
 | 
			
		||||
 
 | 
			
		||||
@@ -30,6 +30,9 @@ func TestNewHTTPAccessLogManager(t *testing.T) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	var manager = models.SharedHTTPAccessLogManager
 | 
			
		||||
	err = manager.CreateTable(db, "accessLog_1")
 | 
			
		||||
@@ -58,6 +61,9 @@ func TestHTTPAccessLogManager_FindTableNames(t *testing.T) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	for i := 0; i < 3; i++ {
 | 
			
		||||
		var before = time.Now()
 | 
			
		||||
@@ -74,7 +80,6 @@ func TestHTTPAccessLogManager_FindTableNames(t *testing.T) {
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
func TestHTTPAccessLogManager_FindTables(t *testing.T) {
 | 
			
		||||
	var config = &dbs.DBConfig{
 | 
			
		||||
		Driver: "mysql",
 | 
			
		||||
@@ -95,6 +100,9 @@ func TestHTTPAccessLogManager_FindTables(t *testing.T) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	for i := 0; i < 3; i++ {
 | 
			
		||||
		var before = time.Now()
 | 
			
		||||
@@ -131,6 +139,9 @@ func TestHTTPAccessLogManager_FindTable(t *testing.T) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	for i := 0; i < 3; i++ {
 | 
			
		||||
		var before = time.Now()
 | 
			
		||||
 
 | 
			
		||||
@@ -3,11 +3,8 @@ package dbutils
 | 
			
		||||
import (
 | 
			
		||||
	"github.com/iwind/TeaGo/dbs"
 | 
			
		||||
	"strings"
 | 
			
		||||
	"sync"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
var SharedCacheLocker = sync.RWMutex{}
 | 
			
		||||
 | 
			
		||||
// NewQuery 构造Query
 | 
			
		||||
func NewQuery(tx *dbs.Tx, dao dbs.DAOWrapper, adminId int64, userId int64) *dbs.Query {
 | 
			
		||||
	query := dao.Object().Query(tx)
 | 
			
		||||
 
 | 
			
		||||
@@ -284,6 +284,9 @@ func (this *APINode) autoUpgrade() error {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return errors.New("load database failed: " + err.Error())
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
	}()
 | 
			
		||||
	one, err := db.FindOne("SELECT version FROM edgeVersions LIMIT 1")
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return errors.New("query version failed: " + err.Error())
 | 
			
		||||
 
 | 
			
		||||
@@ -12,6 +12,12 @@ func TestSQLDump_Dump(t *testing.T) {
 | 
			
		||||
		Dsn:    "root:123456@tcp(127.0.0.1:3306)/db_edge?charset=utf8mb4&timeout=30s",
 | 
			
		||||
		Prefix: "edge",
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	dump := NewSQLDump()
 | 
			
		||||
	result, err := dump.Dump(db)
 | 
			
		||||
@@ -49,6 +55,12 @@ func TestSQLDump_Apply(t *testing.T) {
 | 
			
		||||
		Dsn:    "root:123456@tcp(127.0.0.1:3306)/db_edge?charset=utf8mb4&timeout=30s",
 | 
			
		||||
		Prefix: "edge",
 | 
			
		||||
	})
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	dump := NewSQLDump()
 | 
			
		||||
	result, err := dump.Dump(db)
 | 
			
		||||
@@ -64,6 +76,9 @@ func TestSQLDump_Apply(t *testing.T) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db2.Close()
 | 
			
		||||
	}()
 | 
			
		||||
	ops, err := dump.Apply(db2, result, false)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
 
 | 
			
		||||
@@ -52,6 +52,10 @@ func (this *SQLExecutor) Run(showLog bool) error {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	sqlDump := NewSQLDump()
 | 
			
		||||
	_, err = sqlDump.Apply(db, LatestSQLResult, showLog)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
 
 | 
			
		||||
@@ -28,6 +28,9 @@ func TestSQLExecutor_checkCluster(t *testing.T) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	err = executor.checkCluster(db)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@@ -46,6 +49,9 @@ func TestSQLExecutor_checkMetricItems(t *testing.T) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	err = executor.checkMetricItems(db)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
@@ -64,6 +70,9 @@ func TestSQLExecutor_checkNS(t *testing.T) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
	}()
 | 
			
		||||
 | 
			
		||||
	err = executor.checkNS(db)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
 
 | 
			
		||||
@@ -14,6 +14,9 @@ func TestUpgradeSQLData(t *testing.T) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
	}()
 | 
			
		||||
	err = UpgradeSQLData(db)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
@@ -30,6 +33,9 @@ func TestUpgradeSQLData_v0_3_1(t *testing.T) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
	}()
 | 
			
		||||
	err = upgradeV0_3_1(db)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
@@ -46,6 +52,9 @@ func TestUpgradeSQLData_v0_3_2(t *testing.T) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
	}()
 | 
			
		||||
	err = upgradeV0_3_2(db)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
@@ -62,6 +71,9 @@ func TestUpgradeSQLData_v0_3_3(t *testing.T) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
	}()
 | 
			
		||||
	err = upgradeV0_3_3(db)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
@@ -78,6 +90,9 @@ func TestUpgradeSQLData_v0_3_7(t *testing.T) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
	}()
 | 
			
		||||
	err = upgradeV0_3_7(db)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
@@ -94,6 +109,9 @@ func TestUpgradeSQLData_v0_4_0(t *testing.T) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
	}()
 | 
			
		||||
	err = upgradeV0_4_0(db)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
@@ -110,6 +128,9 @@ func TestUpgradeSQLData_v0_4_1(t *testing.T) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
	}()
 | 
			
		||||
	err = upgradeV0_4_1(db)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
@@ -127,6 +148,9 @@ func TestUpgradeSQLData_v0_4_5(t *testing.T) {
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
	}
 | 
			
		||||
	defer func() {
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
	}()
 | 
			
		||||
	err = upgradeV0_4_5(db)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		t.Fatal(err)
 | 
			
		||||
 
 | 
			
		||||
@@ -77,18 +77,27 @@ func (this *ServerAccessLogCleaner) Loop() error {
 | 
			
		||||
		return err
 | 
			
		||||
	}
 | 
			
		||||
	for _, node := range nodes {
 | 
			
		||||
		dbConfig := node.DBConfig()
 | 
			
		||||
		db, err := dbs.NewInstanceFromConfig(dbConfig)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		err = this.cleanDB(db, endDay)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			_ = db.Close()
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
		err := func(node *models.DBNode) error {
 | 
			
		||||
			var dbConfig = node.DBConfig()
 | 
			
		||||
			nodeDB, err := dbs.NewInstanceFromConfig(dbConfig)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		_ = db.Close()
 | 
			
		||||
			defer func() {
 | 
			
		||||
				_ = nodeDB.Close()
 | 
			
		||||
			}()
 | 
			
		||||
 | 
			
		||||
			err = this.cleanDB(nodeDB, endDay)
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				return err
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			return nil
 | 
			
		||||
		}(node)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return err
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return nil
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user