github.com/fiagdao/tendermint@v0.32.11-0.20220824195748-2087fcc480c1/state/txindex/kv/kv_bench_test.go (about) 1 package kv 2 3 import ( 4 "context" 5 "crypto/rand" 6 "fmt" 7 "io/ioutil" 8 "testing" 9 10 dbm "github.com/tendermint/tm-db" 11 12 abci "github.com/tendermint/tendermint/abci/types" 13 "github.com/tendermint/tendermint/libs/kv" 14 "github.com/tendermint/tendermint/libs/pubsub/query" 15 "github.com/tendermint/tendermint/types" 16 ) 17 18 func BenchmarkTxSearch(b *testing.B) { 19 dbDir, err := ioutil.TempDir("", "benchmark_tx_search_test") 20 if err != nil { 21 b.Errorf("failed to create temporary directory: %s", err) 22 } 23 24 db, err := dbm.NewGoLevelDB("benchmark_tx_search_test", dbDir) 25 if err != nil { 26 b.Errorf("failed to create database: %s", err) 27 } 28 29 allowedKeys := []string{"transfer.address", "transfer.amount"} 30 indexer := NewTxIndex(db, IndexEvents(allowedKeys)) 31 32 for i := 0; i < 35000; i++ { 33 events := []abci.Event{ 34 { 35 Type: "transfer", 36 Attributes: []kv.Pair{ 37 {Key: []byte("address"), Value: []byte(fmt.Sprintf("address_%d", i%100))}, 38 {Key: []byte("amount"), Value: []byte("50")}, 39 }, 40 }, 41 } 42 43 txBz := make([]byte, 8) 44 if _, err := rand.Read(txBz); err != nil { 45 b.Errorf("failed produce random bytes: %s", err) 46 } 47 48 txResult := &types.TxResult{ 49 Height: int64(i), 50 Index: 0, 51 Tx: types.Tx(string(txBz)), 52 Result: abci.ResponseDeliverTx{ 53 Data: []byte{0}, 54 Code: abci.CodeTypeOK, 55 Log: "", 56 Events: events, 57 }, 58 } 59 60 if err := indexer.Index(txResult); err != nil { 61 b.Errorf("failed to index tx: %s", err) 62 } 63 } 64 65 txQuery := query.MustParse("transfer.address = 'address_43' AND transfer.amount = 50") 66 67 b.ResetTimer() 68 69 ctx := context.Background() 70 71 for i := 0; i < b.N; i++ { 72 if _, err := indexer.Search(ctx, txQuery); err != nil { 73 b.Errorf("failed to query for txs: %s", err) 74 } 75 } 76 }