Browse Source

pg 压测

master
dark 1 year ago
parent
commit
397a3f4a02
  1. 29
      apis/pgTest.api
  2. 1
      demo.api
  3. 16
      etc/demo-api.yaml
  4. 21
      internal/handler/PgTest/pginserttesthandler.go
  5. 21
      internal/handler/PgTest/pgsearchtesthandler.go
  6. 16
      internal/handler/routes.go
  7. 51
      internal/logic/PgTest/pginserttestlogic.go
  8. 40
      internal/logic/PgTest/pgsearchtestlogic.go
  9. 3
      internal/svc/servicecontext.go
  10. 11
      internal/types/types.go
  11. 11
      model/pgTest/test.ddl
  12. 24
      model/pgTest/testmodel.go
  13. 91
      model/pgTest/testmodel_gen.go
  14. 5
      model/pgTest/vars.go
  15. 1
      readme.md

29
apis/pgTest.api

@ -0,0 +1,29 @@
syntax = "v1"
type PgTestRequest {
Form string `json:"from"`
}
// 通用api返回参数
type PgTestResponse {
Success bool `json:"success,default=true"` // 是否成功
Message string `json:"message,optional"` // 消息
Result interface{} `json:"data,optional"` // 数据
Total int64 `json:"total,optional"` // 总数
}
@server (
group: PgTest
)
service demo-api {
@doc(
summary: "pg测试接口",
)
@handler PgInsertTestHandler
post /pg_test/insert returns (TestResponse)
@doc(
summary: "pg测试接口",
)
@handler PgSearchTestHandler
post /pg_test/search returns (TestResponse)
}

1
demo.api

@ -1,5 +1,6 @@
syntax = "v1"
import "/apis/teThoroughlyRegister.api"
import "/apis/pgTest.api"
type Request {
Name string `path:"name,options=you|me"`

16
etc/demo-api.yaml

@ -1,17 +1,17 @@
Name: demo-api
Host: 0.0.0.0
Port: 8888
MaxConns: 1000
MaxConns: 10000
Pg:
# postgresql 连接配置
DataSource: postgres://postgres:123456@127.0.0.1:/postgres?sslmode=disable
DataSource: postgres://postgres:123456@127.0.0.1:/test?sslmode=disable
CacheRedis:
- Host: 127.0.0.1:6379
# Pass: $pass
Type: node
Log:
ServiceName: demo
Mode: file
Path: logs
Level: info
KeepDays: 7
# Log:
# ServiceName: demo
# Mode: file
# Path: logs
# Level: info
# KeepDays: 7

21
internal/handler/PgTest/pginserttesthandler.go

@ -0,0 +1,21 @@
package PgTest
import (
"net/http"
"demo/internal/logic/PgTest"
"demo/internal/svc"
"github.com/zeromicro/go-zero/rest/httpx"
)
func PgInsertTestHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
l := PgTest.NewPgInsertTestLogic(r.Context(), svcCtx)
resp, err := l.PgInsertTest()
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

21
internal/handler/PgTest/pgsearchtesthandler.go

@ -0,0 +1,21 @@
package PgTest
import (
"net/http"
"demo/internal/logic/PgTest"
"demo/internal/svc"
"github.com/zeromicro/go-zero/rest/httpx"
)
func PgSearchTestHandler(svcCtx *svc.ServiceContext) http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
l := PgTest.NewPgSearchTestLogic(r.Context(), svcCtx)
resp, err := l.PgSearchTest()
if err != nil {
httpx.ErrorCtx(r.Context(), w, err)
} else {
httpx.OkJsonCtx(r.Context(), w, resp)
}
}
}

16
internal/handler/routes.go

@ -4,6 +4,7 @@ package handler
import (
"net/http"
PgTest "demo/internal/handler/PgTest"
"demo/internal/svc"
"github.com/zeromicro/go-zero/rest"
@ -49,4 +50,19 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) {
},
},
)
server.AddRoutes(
[]rest.Route{
{
Method: http.MethodPost,
Path: "/pg_test/insert",
Handler: PgTest.PgInsertTestHandler(serverCtx),
},
{
Method: http.MethodPost,
Path: "/pg_test/search",
Handler: PgTest.PgSearchTestHandler(serverCtx),
},
},
)
}

51
internal/logic/PgTest/pginserttestlogic.go

@ -0,0 +1,51 @@
package PgTest
import (
"context"
"demo/internal/svc"
"demo/internal/types"
Pgmodel "demo/model/pgTest" // 引入model
"github.com/google/uuid"
"github.com/zeromicro/go-zero/core/logx"
)
type PgInsertTestLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewPgInsertTestLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PgInsertTestLogic {
return &PgInsertTestLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *PgInsertTestLogic) PgInsertTest() (resp *types.TestResponse, err error) {
// 组装数据
uid := uuid.New()
server := l.svcCtx.Config.Name
// insertData := new (Pgmodel.Test)
// insertData.Id = uid.String()
// insertData.Server = server
insertData := &Pgmodel.Test{
Id: uid.String(),
Server: server,
}
// 插入数据库
_, err = l.svcCtx.PgModel.Insert(l.ctx, insertData)
if err != nil {
return nil, err
}
resp = &types.TestResponse{
Success: true,
Message: "插入成功",
}
return resp, nil
}

40
internal/logic/PgTest/pgsearchtestlogic.go

@ -0,0 +1,40 @@
package PgTest
import (
"context"
"demo/internal/svc"
"demo/internal/types"
"github.com/zeromicro/go-zero/core/logx"
)
type PgSearchTestLogic struct {
logx.Logger
ctx context.Context
svcCtx *svc.ServiceContext
}
func NewPgSearchTestLogic(ctx context.Context, svcCtx *svc.ServiceContext) *PgSearchTestLogic {
return &PgSearchTestLogic{
Logger: logx.WithContext(ctx),
ctx: ctx,
svcCtx: svcCtx,
}
}
func (l *PgSearchTestLogic) PgSearchTest() (resp *types.TestResponse, err error) {
// 查询数据库
data, err := l.svcCtx.PgModel.FindOne(l.ctx, "findonetest")
if err != nil {
return nil, err
}
resp = &types.TestResponse{
Success: true,
Message: "查询成功",
Result: *data,
}
return resp, nil
}

3
internal/svc/servicecontext.go

@ -3,6 +3,7 @@ package svc
import (
"demo/internal/config"
dbModel "demo/model"
pgModel "demo/model/pgTest"
_ "github.com/lib/pq"
"github.com/zeromicro/go-zero/core/stores/sqlx"
@ -11,6 +12,7 @@ import (
type ServiceContext struct {
Config config.Config
DbModel dbModel.TeThoroughlyRegisterModel
PgModel pgModel.TestModel
}
func NewServiceContext(c config.Config) *ServiceContext {
@ -18,5 +20,6 @@ func NewServiceContext(c config.Config) *ServiceContext {
return &ServiceContext{
Config: c,
DbModel: dbModel.NewTeThoroughlyRegisterModel(conn),
PgModel: pgModel.NewTestModel(conn),
}
}

11
internal/types/types.go

@ -81,3 +81,14 @@ type TestResponse struct {
Result interface{} `json:"data,optional"` // 数据
Total int64 `json:"total,optional"` // 总数
}
type PgTestRequest struct {
Form string `json:"from"`
}
type PgTestResponse struct {
Success bool `json:"success,default=true"` // 是否成功
Message string `json:"message,optional"` // 消息
Result interface{} `json:"data,optional"` // 数据
Total int64 `json:"total,optional"` // 总数
}

11
model/pgTest/test.ddl

@ -0,0 +1,11 @@
-- public.test definition
-- Drop table
-- DROP TABLE public.test;
CREATE TABLE public.test (
id varchar NOT NULL,
"from" varchar NOT NULL,
CONSTRAINT test_pk PRIMARY KEY (id)
);

24
model/pgTest/testmodel.go

@ -0,0 +1,24 @@
package pgTest
import "github.com/zeromicro/go-zero/core/stores/sqlx"
var _ TestModel = (*customTestModel)(nil)
type (
// TestModel is an interface to be customized, add more methods here,
// and implement the added methods in customTestModel.
TestModel interface {
testModel
}
customTestModel struct {
*defaultTestModel
}
)
// NewTestModel returns a model for the database table.
func NewTestModel(conn sqlx.SqlConn) TestModel {
return &customTestModel{
defaultTestModel: newTestModel(conn),
}
}

91
model/pgTest/testmodel_gen.go

@ -0,0 +1,91 @@
// Code generated by goctl. DO NOT EDIT.
package pgTest
import (
"context"
"database/sql"
"fmt"
"strings"
"github.com/zeromicro/go-zero/core/stores/builder"
"github.com/zeromicro/go-zero/core/stores/sqlc"
"github.com/zeromicro/go-zero/core/stores/sqlx"
"github.com/zeromicro/go-zero/core/stringx"
)
var (
testFieldNames = builder.RawFieldNames(&Test{}, true)
testRows = strings.Join(testFieldNames, ",")
testRowsExpectAutoSet = strings.Join(stringx.Remove(testFieldNames), ",")
testRowsWithPlaceHolder = builder.PostgreSqlJoin(stringx.Remove(testFieldNames, "id"))
)
type (
testModel interface {
Insert(ctx context.Context, data *Test) (sql.Result, error)
FindOne(ctx context.Context, id string) (*Test, error)
Update(ctx context.Context, data *Test) error
Delete(ctx context.Context, id string) error
}
defaultTestModel struct {
conn sqlx.SqlConn
table string
}
Test struct {
Id string `db:"id"`
Server string `db:"server"`
}
)
func newTestModel(conn sqlx.SqlConn) *defaultTestModel {
return &defaultTestModel{
conn: conn,
table: `"public"."test"`,
}
}
func (m *defaultTestModel) withSession(session sqlx.Session) *defaultTestModel {
return &defaultTestModel{
conn: sqlx.NewSqlConnFromSession(session),
table: `"public"."test"`,
}
}
func (m *defaultTestModel) Delete(ctx context.Context, id string) error {
query := fmt.Sprintf("delete from %s where id = $1", m.table)
_, err := m.conn.ExecCtx(ctx, query, id)
return err
}
func (m *defaultTestModel) FindOne(ctx context.Context, id string) (*Test, error) {
query := fmt.Sprintf("select %s from %s where id = $1 limit 1", testRows, m.table)
var resp Test
err := m.conn.QueryRowCtx(ctx, &resp, query, id)
switch err {
case nil:
return &resp, nil
case sqlc.ErrNotFound:
return nil, ErrNotFound
default:
return nil, err
}
}
func (m *defaultTestModel) Insert(ctx context.Context, data *Test) (sql.Result, error) {
query := fmt.Sprintf("insert into %s (%s) values ($1, $2)", m.table, testRowsExpectAutoSet)
ret, err := m.conn.ExecCtx(ctx, query, data.Id, data.Server)
return ret, err
}
func (m *defaultTestModel) Update(ctx context.Context, data *Test) error {
query := fmt.Sprintf("update %s set %s where id = $1", m.table, testRowsWithPlaceHolder)
_, err := m.conn.ExecCtx(ctx, query, data.Id, data.Server)
return err
}
func (m *defaultTestModel) tableName() string {
return m.table
}

5
model/pgTest/vars.go

@ -0,0 +1,5 @@
package pgTest
import "github.com/zeromicro/go-zero/core/stores/sqlx"
var ErrNotFound = sqlx.ErrNotFound

1
readme.md

@ -1,7 +1,6 @@
# 生产model
goctl model pg datasource --url="postgres://postgres:123456@10.0.1.36:5432/postgres?sslmode=disable" --table="te_thoroughly_register" -dir ./model
# 本机
goctl model pg datasource --url="postgres://postgres:123456@127.0.0.1:5432/postgres?sslmode=disable" --table="te_thoroughly_register" -dir ./model
# api 生成
goctl api go -api demo.api -dir .
## 编写api文件

Loading…
Cancel
Save