Yeah that type of benchmark would probably be a lot more useful. I'll see if
I can get something like that going. I've never really done benchmarking
before. Any general tips?
matt
On Tue, Nov 25, 2008 at 7:13 PM, Jamie Orchard-Hays <[EMAIL PROTECTED]>wrote:
> So about 2x? Not bad. I wonder what running httperf against a simple app
> would show.
>
>
>
> On Nov 25, 2008, at 6:04 PM, Matt Mitchell wrote:
>
> I'm starting to experiment with benchmarks/jruby + solr and just wanted to
>> get this out there -- getting ready for a week vacation :)
>>
>> In my solr-ruby 'refactoring' progress, I'm finding some interesting
>> results
>> and will try to post in the next few weeks.
>>
>> This is jruby 1.1.4 and solr 1.3 (empty index) -- using the standard Ruby
>> "Benchmark" library.
>>
>> The script:
>>
>> #
>>
>> require 'java'
>> require 'benchmark'
>>
>> solr_dist_root = File.expand_path(File.join(File.dirname(__FILE__), '..',
>> 'apache-solr-1.3.0'))
>> solr_home = File.join(solr_dist_root, 'example', 'solr')
>>
>> def require_jars(dir)
>> jar_pattern = File.join(dir,"**", "*.jar")
>> jar_files = Dir.glob(jar_pattern)
>> jar_files.each {|jar_file| require jar_file}
>> end
>>
>> def hash_to_params(hash_params)
>> import org.apache.solr.common.params.ModifiableSolrParams
>> query = ModifiableSolrParams.new
>> query.instance_eval do
>> alias _add add
>> def add(field, values)
>> _add(field.to_s, (values.is_a?(Array) ? values :
>> [values]).to_java(:string))
>> end
>> end
>> hash_params.each_pair do |k,v|
>> query.add k, v
>> end
>> query
>> end
>>
>> require_jars(File.join(solr_dist_root, "lib"))
>> require_jars(File.join(solr_dist_root, "dist"))
>>
>> # HttpCommons
>> def http_commons
>> @http_commons ||= (
>> import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer
>> import org.apache.solr.common.params.MapSolrParams
>> solr = CommonsHttpSolrServer.new("http://localhost:8983/solr")
>> )
>> end
>>
>> # EmbeddedSolrServer
>> def embedded(solr_home)
>> @embedded ||= (
>> import org.apache.solr.client.solrj.embedded.EmbeddedSolrServer
>> import org.apache.solr.core.CoreContainer
>> import org.apache.solr.core.CoreDescriptor
>> import org.apache.solr.client.solrj.SolrQuery
>> core_name = 'main-core'
>> container = CoreContainer.new
>> descriptor = CoreDescriptor.new(container, core_name, solr_home)
>> core = container.create(descriptor)
>> container.register(core_name, core, false)
>> solr = EmbeddedSolrServer.new(container, core_name)
>> )
>> end
>>
>> query = {'qt' => 'standard', 'q'=>'ipod', 'facet.field' => 'cat'}
>> params = hash_to_params(query)
>>
>> max = 1000
>>
>> Benchmark.bm do |x|
>> x.report 'http commons' do
>> max.times do
>> http_commons.query(params)
>> end
>> end
>> x.report 'embedded' do
>> max.times do
>> embedded(solr_home).query(params)
>> end
>> end
>> end
>>
>> # THE RESULTS
>>
>> # http commons
>> # 4.634000 0.000000 4.634000 ( 4.633849)
>> # 4.454000 0.000000 4.454000 ( 4.453764)
>> # 3.908000 0.000000 3.908000 ( 3.907367)
>>
>> # embedded
>> # 2.152000 0.000000 2.152000 ( 2.152226)
>> # 2.191000 0.000000 2.191000 ( 2.191359)
>> # 2.083000 0.000000 2.083000 ( 2.082696)
>>
>
>