|
|
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| set VOCAB_SIZE 2000 |
| set DOC_SIZE 100 |
|
|
| set NUM_INSERTS 100000 |
| set NUM_SELECTS 1000 |
|
|
| |
| |
| expr {srand(0)} |
|
|
| proc usage {} { |
| puts stderr "Usage: $::argv0 <rows> <selects>" |
| exit -1 |
| } |
|
|
| proc sql {sql} { |
| puts $::fd $sql |
| } |
|
|
|
|
| |
| |
| |
| proc build_vocab {nWord} { |
| set ret [list] |
| 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] |
| for {set i 0} {$i<$nWord} {incr i} { |
| set len [expr {int((rand()*9.0)+2)}] |
| set term "" |
| for {set j 0} {$j<$len} {incr j} { |
| append term [lindex $chars [expr {int(rand()*[llength $chars])}]] |
| } |
| lappend ret $term |
| } |
| set ret |
| } |
|
|
| proc select_term {} { |
| set n [llength $::vocab] |
| set t [expr int(rand()*$n*3)] |
| if {$t>=2*$n} { set t [expr {($t-2*$n)/100}] } |
| if {$t>=$n} { set t [expr {($t-$n)/10}] } |
| lindex $::vocab $t |
| } |
|
|
| proc select_doc {nTerm} { |
| set ret [list] |
| for {set i 0} {$i<$nTerm} {incr i} { |
| lappend ret [select_term] |
| } |
| set ret |
| } |
|
|
| proc test_1 {nInsert} { |
| sql "PRAGMA synchronous = OFF;" |
| sql "DROP TABLE IF EXISTS t1;" |
| sql "CREATE VIRTUAL TABLE t1 USING fts4;" |
| for {set i 0} {$i < $nInsert} {incr i} { |
| set doc [select_doc $::DOC_SIZE] |
| sql "INSERT INTO t1 VALUES('$doc');" |
| } |
| } |
|
|
| proc test_2 {} { |
| sql "INSERT INTO t1(t1) VALUES('optimize');" |
| } |
|
|
| proc test_3 {nSelect} { |
| for {set i 0} {$i < $nSelect} {incr i} { |
| sql "SELECT count(*) FROM t1 WHERE t1 MATCH '[select_term]';" |
| } |
| } |
|
|
| proc test_4 {nSelect} { |
| for {set i 0} {$i < $nSelect} {incr i} { |
| sql "SELECT count(*) FROM t1 WHERE t1 MATCH '[select_term] [select_term]';" |
| } |
| } |
|
|
| if {[llength $argv]!=0} usage |
|
|
| set ::vocab [build_vocab $::VOCAB_SIZE] |
|
|
| set ::fd [open fts3speed_insert.sql w] |
| test_1 $NUM_INSERTS |
| close $::fd |
|
|
| set ::fd [open fts3speed_select.sql w] |
| test_3 $NUM_SELECTS |
| close $::fd |
|
|
| set ::fd [open fts3speed_select2.sql w] |
| test_4 $NUM_SELECTS |
| close $::fd |
|
|
| set ::fd [open fts3speed_optimize.sql w] |
| test_2 |
| close $::fd |
|
|
| puts "Success. Created files:" |
| puts " fts3speed_insert.sql" |
| puts " fts3speed_select.sql" |
| puts " fts3speed_select2.sql" |
| puts " fts3speed_optimize.sql" |
|
|
|
|