126 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			Crystal
		
	
	
	
	
	
			
		
		
	
	
			126 lines
		
	
	
	
		
			5.2 KiB
		
	
	
	
		
			Crystal
		
	
	
	
	
	
| require "benchmark"
 | |
| require "./utilities.cr"
 | |
| require "./db-cars.cr"
 | |
| 
 | |
| # List of environment variables and default values:
 | |
| # ENV["CARNAME"]          rescue "Corvet-#{(db_size/2).to_i}"
 | |
| # ENV["CARCOLOR"]         rescue "red"
 | |
| # ENV["CARKEYWORD"]       rescue "spacious"
 | |
| # ENV["DBSIZE"]           rescue 50_000
 | |
| # ENV["DBSIZE_START"]     rescue 1_000
 | |
| # ENV["DBSIZE_INCREMENT"] rescue 1_000
 | |
| # ENV["REPORT_DIR"]       rescue "results"
 | |
| # ENV["NBRUN"]            rescue 100
 | |
| # ENV["MAXINDEXES"]       rescue 5_000
 | |
| # ENV["LRU_SIZE"]         rescue 10_000
 | |
| 
 | |
| require "./utilities-cars.cr"
 | |
| 
 | |
| def bench_searches()
 | |
| 	cars_ram      = SPECDB::RAMOnly(Car).new
 | |
| 	cars_cached   = SPECDB::Cached(Car).new
 | |
| 	cars_lru      = SPECDB::Common(Car).new "-#{Context.lru_size}", Context.lru_size
 | |
| 	cars_semi     = SPECDB::Uncached(Car).new "-semi"
 | |
| 	cars_uncached = SPECDB::Uncached(Car).new
 | |
| 
 | |
| 	ram_Sby_name,      ram_Sby_color,      ram_Sby_keywords      = ram_indexes      cars_ram
 | |
| 	cached_Sby_name,   cached_Sby_color,   cached_Sby_keywords   = cached_indexes   cars_cached
 | |
| 	lru_Sby_name,      lru_Sby_color,      lru_Sby_keywords      = cached_indexes   cars_lru
 | |
| 	semi_Sby_name,     semi_Sby_color,     semi_Sby_keywords     = cached_indexes   cars_semi
 | |
| 	uncached_Sby_name, uncached_Sby_color, uncached_Sby_keywords = uncached_indexes cars_uncached
 | |
| 
 | |
| 	fn = ->search_benchmark(DODB::Storage(Car), Int32, String, DODB::Trigger::Index(Car), DODB::Trigger::Partition(Car), DODB::Trigger::Tags(Car))
 | |
| 
 | |
| 	prepare_env cars_ram,      "ram",      ram_Sby_name,      ram_Sby_color,      ram_Sby_keywords,      &fn
 | |
| 	prepare_env cars_cached,   "cached",   cached_Sby_name,   cached_Sby_color,   cached_Sby_keywords,   &fn
 | |
| 	prepare_env cars_lru,      "lru",      lru_Sby_name,      lru_Sby_color,      lru_Sby_keywords,      &fn
 | |
| 	prepare_env cars_semi,     "semi",     semi_Sby_name,     semi_Sby_color,     semi_Sby_keywords,     &fn
 | |
| 	prepare_env cars_uncached, "uncached", uncached_Sby_name, uncached_Sby_color, uncached_Sby_keywords, &fn
 | |
| end
 | |
| 
 | |
| def bench_add()
 | |
| 	cars_ram      = SPECDB::RAMOnly(Car).new
 | |
| 	cars_cached   = SPECDB::Cached(Car).new
 | |
| 	cars_lru      = SPECDB::Common(Car).new "-#{Context.lru_size}", Context.lru_size
 | |
| 	cars_semi     = SPECDB::Uncached(Car).new "-semi"
 | |
| 	cars_uncached = SPECDB::Uncached(Car).new
 | |
| 
 | |
| 	ram_indexes      cars_ram
 | |
| 	cached_indexes   cars_cached
 | |
| 	cached_indexes   cars_lru
 | |
| 	cached_indexes   cars_semi
 | |
| 	uncached_indexes cars_uncached
 | |
| 
 | |
| 	avr = perform_add(cars_ram)
 | |
| 	puts "(ram db and indexes) add a value (average on #{Context.nb_run} tries): #{avr}"
 | |
| 
 | |
| 	avr = perform_add(cars_cached)
 | |
| 	puts "(cached db and indexes) add a value (average on #{Context.nb_run} tries): #{avr}"
 | |
| 
 | |
| 	avr = perform_add(cars_lru)
 | |
| 	puts "(lru db and cached indexes) add a value (average on #{Context.nb_run} tries): #{avr}"
 | |
| 
 | |
| 	avr = perform_add(cars_semi)
 | |
| 	puts "(uncached db but cached indexes) add a value (average on #{Context.nb_run} tries): #{avr}"
 | |
| 
 | |
| 	avr = perform_add(cars_uncached)
 | |
| 	puts "(uncached db and indexes) add a value (average on #{Context.nb_run} tries): #{avr}"
 | |
| 
 | |
| 	cars_ram.rm_storage_dir
 | |
| 	cars_cached.rm_storage_dir
 | |
| 	cars_semi.rm_storage_dir
 | |
| 	cars_uncached.rm_storage_dir
 | |
| end
 | |
| 
 | |
| def bench_50_shades_of_lru()
 | |
| 	cars_lru1  = SPECDB::Common(Car).new "-1k",  1_000
 | |
| 	cars_lru5  = SPECDB::Common(Car).new "-5k",  5_000
 | |
| 	cars_lru10 = SPECDB::Common(Car).new "-10k", 10_000
 | |
| 	cars_lru20 = SPECDB::Common(Car).new "-20k", 20_000
 | |
| 
 | |
| 	lru_Sby_name1,   lru_Sby_color1,   lru_Sby_keywords1   = cached_indexes cars_lru1
 | |
| 	lru_Sby_name5,   lru_Sby_color5,   lru_Sby_keywords5   = cached_indexes cars_lru5
 | |
| 	lru_Sby_name10,  lru_Sby_color10,  lru_Sby_keywords10  = cached_indexes cars_lru10
 | |
| 	lru_Sby_name20,  lru_Sby_color20,  lru_Sby_keywords20  = cached_indexes cars_lru20
 | |
| 
 | |
| 	fn = ->search_benchmark(DODB::Storage(Car), Int32, String, DODB::Trigger::Index(Car), DODB::Trigger::Partition(Car), DODB::Trigger::Tags(Car))
 | |
| 
 | |
| 	prepare_env cars_lru1,     "lru1",     lru_Sby_name1,     lru_Sby_color1,     lru_Sby_keywords1,     &fn
 | |
| 	prepare_env cars_lru5,     "lru5",     lru_Sby_name5,     lru_Sby_color5,     lru_Sby_keywords5,     &fn
 | |
| 	prepare_env cars_lru10,    "lru10",    lru_Sby_name10,    lru_Sby_color10,    lru_Sby_keywords10,    &fn
 | |
| 	prepare_env cars_lru20,    "lru20",    lru_Sby_name20,    lru_Sby_color20,    lru_Sby_keywords20,    &fn
 | |
| end
 | |
| 
 | |
| ENV["REPORT_DIR"]?.try { |report_dir| Context.report_dir = report_dir }
 | |
| Dir.mkdir_p Context.report_dir
 | |
| 
 | |
| ENV["MAXINDEXES"]?.try       { |it| Context.max_indexes = it.to_i }
 | |
| ENV["NBRUN"]?.try            { |it| Context.nb_run      = it.to_i }
 | |
| ENV["DBSIZE"]?.try           { |it| Context.to          = it.to_i }
 | |
| ENV["DBSIZE_START"]?.try     { |it| Context.from        = it.to_i }
 | |
| ENV["DBSIZE_INCREMENT"]?.try { |it| Context.incr        = it.to_i }
 | |
| ENV["LRU_SIZE"]?.try         { |it| Context.lru_size    = it.to_u32 }
 | |
| 
 | |
| puts "REPORT_DIR:       #{Context.report_dir}"
 | |
| puts "MAXINDEXES:       #{Context.max_indexes}"
 | |
| puts "NBRUN:            #{Context.nb_run}"
 | |
| puts "DBSIZE:           #{Context.to}"
 | |
| puts "DBSIZE_START:     #{Context.from}"
 | |
| puts "DBSIZE_INCREMENT: #{Context.incr}"
 | |
| puts "LRU_SIZE:         #{Context.lru_size}"
 | |
| 
 | |
| if ARGV.size == 0
 | |
| 	puts "Usage: benchmark-cars (lru|search|add)"
 | |
| 	exit 0
 | |
| end
 | |
| 
 | |
| case ARGV[0]
 | |
| when /lru/
 | |
| 	bench_50_shades_of_lru
 | |
| when /search/
 | |
| 	bench_searches
 | |
| when /add/
 | |
| 	bench_add
 | |
| else
 | |
| 	puts "Usage: benchmark-cars (lru|search|add)"
 | |
| end
 |