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