Here's something to note when using net/http in Ruby (which open-uri wraps). Even though it's about as fast as other options, it uses a huge cpu load when compared to others (on ruby 1.8.6):

http://apocryph.org/more_indepth_analysis_ruby_http_client_performance


On Nov 26, 2008, at 12:06 PM, Matt Mitchell wrote:

Interesting. My main goal was to get a feel for how jruby and the
direct/embedded stuff compared to mri ruby and straight up http. But
obviously, the data and these tests are not realistic at all. Thanks for
your feedback guys.

Matt

On Wed, Nov 26, 2008 at 10:34 AM, Erik Hatcher
<[EMAIL PROTECTED]>wrote:

I just had a brief conversation with Yonik on this to get his way more expert opinion, and it really boils down to this in this particular test...
the query itself is incredibly fast (1 millisecond or less QTime Solr
reports) since there are no documents.  So what these differences are
showing is merely the difference between HTTP and a method call - with
nothing else (of note) going on.

In a realer world scenario, the HTTP overhead makes less difference as the
work being done in the query/faceting overshadows the communication
overhead.

There's lies, damned lies, and benchmarks :)

      Erik



On Nov 26, 2008, at 9:54 AM, Matt Mitchell wrote:

Yeah I overlooked all of that. Thanks Erik. So could a better query test
be
an incremental one based on id like:

100.times do |id|
q = "id:#{id}"
# query request here...
end

?

Would you happen to know why the solr home and data dir never really
change?
Anytime I use commons http or embedded, a "solr" directory is created in
the
same directory as my script. Even though I'm setting the home and data dir
in my code?

Matt

On Wed, Nov 26, 2008 at 3:28 AM, Erik Hatcher <[EMAIL PROTECTED]
wrote:

just a couple of quick code comments...

On Nov 25, 2008, at 6:04 PM, Matt Mitchell wrote:

# 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)


You'll want to close that core, otherwise the JVM doesn't exit.  I
changed
this to:

@core = ....

container.register(core_name, core, false)



and used @core there.

query = {'qt' => 'standard', 'q'=>'ipod', 'facet.field' => 'cat'}



Note that faceting is not enabled unless there is also a &facet=on

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


And I added an:

@core.close

at the end.

    Erik





Reply via email to