Annotation of embedaddon/sqlite3/ext/fts3/fts3speed.tcl, revision 1.1
1.1 ! misho 1:
! 2:
! 3: #--------------------------------------------------------------------------
! 4: # This script contains several sub-programs used to test FTS3/FTS4
! 5: # performance. It does not run the queries directly, but generates SQL
! 6: # scripts that can be run using the shell tool.
! 7: #
! 8: # The following cases are tested:
! 9: #
! 10: # 1. Inserting documents into an FTS3 table.
! 11: # 2. Optimizing an FTS3 table (i.e. "INSERT INTO t1 VALUES('optimize')").
! 12: # 3. Deleting documents from an FTS3 table.
! 13: # 4. Querying FTS3 tables.
! 14: #
! 15:
! 16: # Number of tokens in vocabulary. And number of tokens in each document.
! 17: #
! 18: set VOCAB_SIZE 2000
! 19: set DOC_SIZE 100
! 20:
! 21: set NUM_INSERTS 100000
! 22: set NUM_SELECTS 1000
! 23:
! 24: # Force everything in this script to be deterministic.
! 25: #
! 26: expr {srand(0)}
! 27:
! 28: proc usage {} {
! 29: puts stderr "Usage: $::argv0 <rows> <selects>"
! 30: exit -1
! 31: }
! 32:
! 33: proc sql {sql} {
! 34: puts $::fd $sql
! 35: }
! 36:
! 37:
! 38: # Return a list of $nWord randomly generated tokens each between 2 and 10
! 39: # characters in length.
! 40: #
! 41: proc build_vocab {nWord} {
! 42: set ret [list]
! 43: set chars [list a b c d e f g h i j k l m n o p q r s t u v w x y z]
! 44: for {set i 0} {$i<$nWord} {incr i} {
! 45: set len [expr {int((rand()*9.0)+2)}]
! 46: set term ""
! 47: for {set j 0} {$j<$len} {incr j} {
! 48: append term [lindex $chars [expr {int(rand()*[llength $chars])}]]
! 49: }
! 50: lappend ret $term
! 51: }
! 52: set ret
! 53: }
! 54:
! 55: proc select_term {} {
! 56: set n [llength $::vocab]
! 57: set t [expr int(rand()*$n*3)]
! 58: if {$t>=2*$n} { set t [expr {($t-2*$n)/100}] }
! 59: if {$t>=$n} { set t [expr {($t-$n)/10}] }
! 60: lindex $::vocab $t
! 61: }
! 62:
! 63: proc select_doc {nTerm} {
! 64: set ret [list]
! 65: for {set i 0} {$i<$nTerm} {incr i} {
! 66: lappend ret [select_term]
! 67: }
! 68: set ret
! 69: }
! 70:
! 71: proc test_1 {nInsert} {
! 72: sql "PRAGMA synchronous = OFF;"
! 73: sql "DROP TABLE IF EXISTS t1;"
! 74: sql "CREATE VIRTUAL TABLE t1 USING fts4;"
! 75: for {set i 0} {$i < $nInsert} {incr i} {
! 76: set doc [select_doc $::DOC_SIZE]
! 77: sql "INSERT INTO t1 VALUES('$doc');"
! 78: }
! 79: }
! 80:
! 81: proc test_2 {} {
! 82: sql "INSERT INTO t1(t1) VALUES('optimize');"
! 83: }
! 84:
! 85: proc test_3 {nSelect} {
! 86: for {set i 0} {$i < $nSelect} {incr i} {
! 87: sql "SELECT count(*) FROM t1 WHERE t1 MATCH '[select_term]';"
! 88: }
! 89: }
! 90:
! 91: proc test_4 {nSelect} {
! 92: for {set i 0} {$i < $nSelect} {incr i} {
! 93: sql "SELECT count(*) FROM t1 WHERE t1 MATCH '[select_term] [select_term]';"
! 94: }
! 95: }
! 96:
! 97: if {[llength $argv]!=0} usage
! 98:
! 99: set ::vocab [build_vocab $::VOCAB_SIZE]
! 100:
! 101: set ::fd [open fts3speed_insert.sql w]
! 102: test_1 $NUM_INSERTS
! 103: close $::fd
! 104:
! 105: set ::fd [open fts3speed_select.sql w]
! 106: test_3 $NUM_SELECTS
! 107: close $::fd
! 108:
! 109: set ::fd [open fts3speed_select2.sql w]
! 110: test_4 $NUM_SELECTS
! 111: close $::fd
! 112:
! 113: set ::fd [open fts3speed_optimize.sql w]
! 114: test_2
! 115: close $::fd
! 116:
! 117: puts "Success. Created files:"
! 118: puts " fts3speed_insert.sql"
! 119: puts " fts3speed_select.sql"
! 120: puts " fts3speed_select2.sql"
! 121: puts " fts3speed_optimize.sql"
! 122:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>