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