demo.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. package main
  2. import (
  3. "fmt"
  4. "git.sxidc.com/go-tools/utils/strutils"
  5. "git.sxidc.com/service-supports/ds-sdk/sdk"
  6. "math/rand"
  7. "sync"
  8. "time"
  9. )
  10. const (
  11. token = "IpTTwAQweh/BP51fz5CzWKQFaXHvZe6ewvk6yOcAOkU="
  12. address = "localhost"
  13. httpPort = "10000"
  14. grpcPort = "10001"
  15. namespace = "ns-sdk-demo"
  16. dataSource = "ds-sdk-demo"
  17. deleteSql = "delete-sdk-demo"
  18. goRoutineCount = 100
  19. )
  20. const (
  21. sqlInsertTpl = "INSERT INTO test.classes (id, name, student_num) VALUES ('[[ .id ]]', '[[ .name ]]', [[ .student_num ]])"
  22. )
  23. var (
  24. sqlSpec = sdk.SqlSpec{
  25. Transaction: false,
  26. Clauses: "- DELETE FROM test.classes WHERE id = '{{ .id }}'",
  27. }
  28. )
  29. func main() {
  30. classID := strutils.SimpleUUID()
  31. className := strutils.SimpleUUID()
  32. studentNum := rand.Int31n(100)
  33. insertExecuteParams := map[string]any{
  34. "id": classID,
  35. "name": className,
  36. "student_num": studentNum,
  37. }
  38. deleteExecuteParams := map[string]any{
  39. "id": classID,
  40. }
  41. err := sdk.InitInstance(token, address, httpPort, grpcPort, namespace, dataSource)
  42. if err != nil {
  43. panic(err)
  44. }
  45. defer func() {
  46. err := sdk.DestroyInstance()
  47. if err != nil {
  48. panic(err)
  49. }
  50. }()
  51. err = sdk.GetInstance().CreateSQL(deleteSql, sqlSpec.ToMap())
  52. if err != nil {
  53. panic(err)
  54. }
  55. _, err = sdk.GetInstance().ExecuteRawSql(sqlInsertTpl, insertExecuteParams)
  56. if err != nil {
  57. panic(err)
  58. }
  59. _, err = sdk.GetInstance().ExecuteSql(deleteSql, deleteExecuteParams)
  60. if err != nil {
  61. panic(err)
  62. }
  63. wg := sync.WaitGroup{}
  64. wg.Add(goRoutineCount)
  65. start := time.Now()
  66. for i := 0; i < goRoutineCount; i++ {
  67. go func() {
  68. defer wg.Done()
  69. err = sdk.GetInstance().Transaction(func(tx *sdk.Transaction) error {
  70. err := tx.ExecuteRawSql(sqlInsertTpl, insertExecuteParams)
  71. if err != nil {
  72. return err
  73. }
  74. err = tx.ExecuteSql(deleteSql, deleteExecuteParams)
  75. if err != nil {
  76. return err
  77. }
  78. return nil
  79. })
  80. if err != nil {
  81. panic(err)
  82. }
  83. }()
  84. }
  85. wg.Wait()
  86. end := time.Now()
  87. fmt.Println(end.Sub(start).Milliseconds())
  88. }