github.com/lazyledger/lazyledger-core@v0.35.0-dev.0.20210613111200-4c651f053571/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 abci "github.com/lazyledger/lazyledger-core/abci/types" 11 "github.com/lazyledger/lazyledger-core/libs/db/badgerdb" 12 "github.com/lazyledger/lazyledger-core/libs/pubsub/query" 13 "github.com/lazyledger/lazyledger-core/types" 14 ) 15 16 func BenchmarkTxSearch(b *testing.B) { 17 dbDir, err := ioutil.TempDir("", "benchmark_tx_search_test") 18 if err != nil { 19 b.Errorf("failed to create temporary directory: %s", err) 20 } 21 22 db, err := badgerdb.NewDB("benchmark_tx_search_test", dbDir) 23 if err != nil { 24 b.Errorf("failed to create database: %s", err) 25 } 26 27 indexer := NewTxIndex(db) 28 29 for i := 0; i < 35000; i++ { 30 events := []abci.Event{ 31 { 32 Type: "transfer", 33 Attributes: []abci.EventAttribute{ 34 {Key: []byte("address"), Value: []byte(fmt.Sprintf("address_%d", i%100)), Index: true}, 35 {Key: []byte("amount"), Value: []byte("50"), Index: true}, 36 }, 37 }, 38 } 39 40 txBz := make([]byte, 8) 41 if _, err := rand.Read(txBz); err != nil { 42 b.Errorf("failed produce random bytes: %s", err) 43 } 44 45 txResult := &abci.TxResult{ 46 Height: int64(i), 47 Index: 0, 48 Tx: types.Tx(string(txBz)), 49 Result: abci.ResponseDeliverTx{ 50 Data: []byte{0}, 51 Code: abci.CodeTypeOK, 52 Log: "", 53 Events: events, 54 }, 55 } 56 57 if err := indexer.Index(txResult); err != nil { 58 b.Errorf("failed to index tx: %s", err) 59 } 60 } 61 62 txQuery := query.MustParse("transfer.address = 'address_43' AND transfer.amount = 50") 63 64 b.ResetTimer() 65 66 ctx := context.Background() 67 68 for i := 0; i < b.N; i++ { 69 if _, err := indexer.Search(ctx, txQuery); err != nil { 70 b.Errorf("failed to query for txs: %s", err) 71 } 72 } 73 }