@@ -7,13 +7,14 @@ import (
7
7
"database/sql"
8
8
"strconv"
9
9
"math/rand"
10
+ "time"
10
11
)
11
12
12
13
const (
13
14
TRANSFER_CONNECTIONS = 8
14
15
INIT_AMOUNT = 10000
15
16
N_ITERATIONS = 10000
16
- N_ACCOUNTS = 100 //2*TRANSFER_CONNECTIONS
17
+ N_ACCOUNTS = 2 * 100000
17
18
)
18
19
19
20
var cfg = "host=127.0.0.1 port=5432 sslmode=disable"
@@ -40,7 +41,7 @@ func prepare_db() {
40
41
exec (conn , "drop extension if exists pg_shard CASCADE" )
41
42
exec (conn , "create extension pg_shard" )
42
43
exec (conn , "drop table if exists t" )
43
- exec (conn , "create table t(u int, v int)" )
44
+ exec (conn , "create table t(u int primary key , v int)" )
44
45
exec (conn , "select master_create_distributed_table(table_name := 't', partition_column := 'u')" )
45
46
exec (conn , "select master_create_worker_shards(table_name := 't', shard_count := 2, replication_factor := 1)" )
46
47
@@ -56,19 +57,20 @@ func transfer(id int, wg *sync.WaitGroup) {
56
57
checkErr (err )
57
58
defer conn .Close ()
58
59
59
- uids1 := []int {1 ,3 ,4 , 5 , 7 , 8 ,10 ,14 }
60
- uids2 := []int {2 ,6 ,9 ,11 ,12 ,13 ,18 ,21 }
61
-
62
60
for i := 0 ; i < N_ITERATIONS ; i ++ {
61
+ amount := 1
62
+ account1 := rand .Intn (N_ACCOUNTS )
63
+ account2 := rand .Intn (N_ACCOUNTS )
63
64
exec (conn , "begin" )
64
- exec (conn , "update t set v = v + 1 where u=" + strconv .Itoa (uids1 [rand .Intn (TRANSFER_CONNECTIONS )]))
65
- exec (conn , "update t set v = v - 1 where u=" + strconv .Itoa (uids2 [rand .Intn (TRANSFER_CONNECTIONS )]))
65
+ exec (conn , fmt .Sprintf ("update t set v = v - %d where u=%d" , amount , account1 ))
66
+ exec (conn , fmt .Sprintf ("update t set v = v + %d where u=%d" , amount , account2 ))
67
+
66
68
// exec(conn, "update t set v = v + 1 where u=1")
67
69
// exec(conn, "update t set v = v - 1 where u=2")
68
70
exec (conn , "commit" )
69
71
70
72
if i % 1000 == 0 {
71
- fmt .Printf ("%u tx processed.\n " , i )
73
+ fmt .Printf ("%d tx processed.\n " , i )
72
74
}
73
75
}
74
76
@@ -100,6 +102,8 @@ func main() {
100
102
101
103
prepare_db ()
102
104
105
+ start := time .Now ()
106
+
103
107
transferWg .Add (TRANSFER_CONNECTIONS )
104
108
for i := 0 ; i < TRANSFER_CONNECTIONS ; i ++ {
105
109
go transfer (i , & transferWg )
@@ -123,7 +127,7 @@ func main() {
123
127
124
128
// fmt.Println(sum)
125
129
126
- fmt .Printf ("done \n " )
130
+ fmt .Printf ("Elapsed time %f seconds \n " , time . Since ( start ). Seconds () )
127
131
}
128
132
129
133
func exec (conn * sql.DB , stmt string ) {
0 commit comments