Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Net::LDAP vs ruby/ldap

Reply
Thread Tools

Net::LDAP vs ruby/ldap

 
 
dacat
Guest
Posts: n/a
 
      04-27-2007
The basic premise of this test was to see how long it would take to do
the following:

1000 Basic lookups on a known attribute/value pair over an unencrypted
connection using anonymous bind for each library.

This post is for informational purposes, I knew the NET::LDAP lib
would be slower but I wanted to see by how much.
{if you are new to ruby, the reason it is slower is because its a TRUE
ruby implementation of the LDAP rfc. while on the other hand the ruby/
ldap lib is a C front end to the openldap library}

Bottom line is -- I just figured i would share.
Code:
----------------
require 'benchmark'
include Benchmark

LOOP_COUNT = 1000
require 'ldap'
require 'net/ldap'

HOST = 'somehost.com'
S_ATTR = 'some attribute that exists that can be lookedup'
S_VAL = 'a value for the attribute that iss valid'
TREE_BASE = 'a valid base ex. o=com'

class LdapTest

def net_ldap_test
ldap = Net::LDAP.new :host => HOST, ort => 389
filter = Net::LDAP::Filter.eq( S_ATTR, S_VAL )
ldap.search( :base =>TREE_BASE, :filter => filter ) do |entry|
a=entry.dn
end
nil
end


def ldap_test
conn = LDAP::Conn.new(HOST, LDAP::LDAP_PORT)
filter = "(#{S_ATTR}=#{S_VAL})"
conn.search(TREE_BASE, LDAP::LDAP_SCOPE_SUBTREE, filter) do |entry|
a=entry.dn
end
nil
end

ldap_test=LdapTest.new

Benchmark.bm(15) do |x|
x.report("NET::LDAP:") { for i in 1..LOOP_COUNT;
ldap_test.net_ldap_test; end }
x.report("ruby-ldap") { for i in 1..LOOP_COUNT ;
ldap_test.ldap_test; end }
end
end
================================================== =============

My results.
user system total real
NET::LDAP: 7.150000 0.580000 7.730000 ( 19.49458
ruby-ldap 0.210000 0.120000 0.330000 ( 11.853484)


ruby/ldap : http://ruby-ldap.sourceforge.net/
net::ldap : http://rubyforge.org/projects/net-ldap/

ruby --version
ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-linux]

 
Reply With Quote
 
 
 
 
Daniel Berger
Guest
Posts: n/a
 
      04-27-2007
On Apr 27, 1:07 pm, dacat <(E-Mail Removed)> wrote:
> The basic premise of this test was to see how long it would take to do
> the following:
>
> 1000 Basic lookups on a known attribute/value pair over an unencrypted
> connection using anonymous bind for each library.
>
> This post is for informational purposes, I knew the NET::LDAP lib
> would be slower but I wanted to see by how much.
> {if you are new to ruby, the reason it is slower is because its a TRUE
> ruby implementation of the LDAP rfc. while on the other hand the ruby/
> ldap lib is a C front end to the openldap library}
>
> Bottom line is -- I just figured i would share.
> Code:
> ----------------
> require 'benchmark'
> include Benchmark
>
> LOOP_COUNT = 1000
> require 'ldap'
> require 'net/ldap'
>
> HOST = 'somehost.com'
> S_ATTR = 'some attribute that exists that can be lookedup'
> S_VAL = 'a value for the attribute that iss valid'
> TREE_BASE = 'a valid base ex. o=com'
>
> class LdapTest
>
> def net_ldap_test
> ldap = Net::LDAP.new :host => HOST, ort => 389
> filter = Net::LDAP::Filter.eq( S_ATTR, S_VAL )
> ldap.search( :base =>TREE_BASE, :filter => filter ) do |entry|
> a=entry.dn
> end
> nil
> end
>
> def ldap_test
> conn = LDAP::Conn.new(HOST, LDAP::LDAP_PORT)
> filter = "(#{S_ATTR}=#{S_VAL})"
> conn.search(TREE_BASE, LDAP::LDAP_SCOPE_SUBTREE, filter) do |entry|
> a=entry.dn
> end
> nil
> end
>
> ldap_test=LdapTest.new
>
> Benchmark.bm(15) do |x|
> x.report("NET::LDAP:") { for i in 1..LOOP_COUNT;
> ldap_test.net_ldap_test; end }
> x.report("ruby-ldap") { for i in 1..LOOP_COUNT ;
> ldap_test.ldap_test; end }
> end
> end
> ================================================== =============
>
> My results.
> user system total real
> NET::LDAP: 7.150000 0.580000 7.730000 ( 19.49458
> ruby-ldap 0.210000 0.120000 0.330000 ( 11.853484)
>
> ruby/ldap :http://ruby-ldap.sourceforge.net/
> net::ldap :http://rubyforge.org/projects/net-ldap/
>
> ruby --version
> ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-linux]


While it's interesting, I'm afraid I have to stick with net-ldap. The
problem with ruby-ldap is that it segfaults in conjunction with
WEBrick, as I know all too well.

Regards,

Dan


 
Reply With Quote
 
 
 
 
ara.t.howard@noaa.gov
Guest
Posts: n/a
 
      04-27-2007
On Sat, 28 Apr 2007, Daniel Berger wrote:

> On Apr 27, 1:07 pm, dacat <(E-Mail Removed)> wrote:
>> The basic premise of this test was to see how long it would take to do
>> the following:
>>
>> 1000 Basic lookups on a known attribute/value pair over an unencrypted
>> connection using anonymous bind for each library.
>>
>> This post is for informational purposes, I knew the NET::LDAP lib
>> would be slower but I wanted to see by how much.
>> {if you are new to ruby, the reason it is slower is because its a TRUE
>> ruby implementation of the LDAP rfc. while on the other hand the ruby/
>> ldap lib is a C front end to the openldap library}
>>
>> Bottom line is -- I just figured i would share.
>> Code:
>> ----------------
>> require 'benchmark'
>> include Benchmark
>>
>> LOOP_COUNT = 1000
>> require 'ldap'
>> require 'net/ldap'
>>
>> HOST = 'somehost.com'
>> S_ATTR = 'some attribute that exists that can be lookedup'
>> S_VAL = 'a value for the attribute that iss valid'
>> TREE_BASE = 'a valid base ex. o=com'
>>
>> class LdapTest
>>
>> def net_ldap_test
>> ldap = Net::LDAP.new :host => HOST, ort => 389
>> filter = Net::LDAP::Filter.eq( S_ATTR, S_VAL )
>> ldap.search( :base =>TREE_BASE, :filter => filter ) do |entry|
>> a=entry.dn
>> end
>> nil
>> end
>>
>> def ldap_test
>> conn = LDAP::Conn.new(HOST, LDAP::LDAP_PORT)
>> filter = "(#{S_ATTR}=#{S_VAL})"
>> conn.search(TREE_BASE, LDAP::LDAP_SCOPE_SUBTREE, filter) do |entry|
>> a=entry.dn
>> end
>> nil
>> end
>>
>> ldap_test=LdapTest.new
>>
>> Benchmark.bm(15) do |x|
>> x.report("NET::LDAP:") { for i in 1..LOOP_COUNT;
>> ldap_test.net_ldap_test; end }
>> x.report("ruby-ldap") { for i in 1..LOOP_COUNT ;
>> ldap_test.ldap_test; end }
>> end
>> end
>> ================================================== =============
>>
>> My results.
>> user system total real
>> NET::LDAP: 7.150000 0.580000 7.730000 ( 19.49458
>> ruby-ldap 0.210000 0.120000 0.330000 ( 11.853484)
>>
>> ruby/ldap :http://ruby-ldap.sourceforge.net/
>> net::ldap :http://rubyforge.org/projects/net-ldap/
>>
>> ruby --version
>> ruby 1.8.6 (2007-03-13 patchlevel 0) [i686-linux]

>
> While it's interesting, I'm afraid I have to stick with net-ldap. The
> problem with ruby-ldap is that it segfaults in conjunction with
> WEBrick, as I know all too well.
>
> Regards,
>
> Dan


my good friend justin crawford works heavily with ruby and ldap for the
universtiy of colorado managing a huge federated authentication system. they
use the pure ruby ldap lib because the c version is unstable. he's been using
it for several years on a system that's serving ~ 100,000 people - so i think
it's fast enough.

fyi.

-a
--
be kind whenever possible... it is always possible.
- the dalai lama
 
Reply With Quote
 
Ian Macdonald
Guest
Posts: n/a
 
      05-18-2007
On Apr 27, 10:16 pm, (E-Mail Removed) wrote:

> my good friend justin crawford works heavily with ruby and ldap for the
> universtiy of colorado managing a huge federated authentication system. they
> use the pure ruby ldap lib because the c version is unstable. he's been using
> it for several years on a system that's serving ~ 100,000 people - so i think
> it's fast enough.


I'd be interested to discover exactly what "unstable" means here, so
that I can fix the problem.

I'd also like to see code that can reproduce the segfault in
combination with WEBRick.

Thanks,

Ian

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off




Advertisments