py 发表于 2009-11-29 16:23

使Net::LDAP性能提高30倍!

尝试使用use Net::LDAPxs
替换use Net::LDAP

呵呵,实在抱歉,用如此误导性的标题吸引大家。我想说的并不是通过设置改进Net::LDAP的性能,而是在情况允许的情况下尝试Net::LDAPxs
先看两段代码,第一段是使用Net::LDAP,第二段是使用Net::LDAPxs
use Net::LDAP;

my $base = "ou=language,dc=shallot,dc=com";
my $scope = 1;
my $filter = "(|(cn=buy)(cn=details))";
my @attrs = ('objectClass', 'cn', 'ja');


my $ldap = Net::LDAP->new("127.0.0.1", port => 389);
$ldap->bind("cn=Manager,dc=shallot,dc=com", password => "secret");

my $msg = $ldap->search(base => $base, filter => $filter, scope => "one", attrs=> \@attrs);

my @entries = $msg->entries();

foreach my $entry (@entries) {
        foreach my $attr ($entry->attributes()) {
                foreach my $val ($entry->get_value($attr)) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "$attr<>$val\n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
}


use Net::LDAPxs;

my $base = "ou=language,dc=shallot,dc=com";
my $scope = 'one';
my $filter = "(|(cn=buy)(cn=details))";
my @attrs = ('objectClass', 'cn', 'ja');


my $ldap = Net::LDAPxs->new("127.0.0.1", Port => "389");

$ldap->bind("cn=Manager,dc=shallot,dc=com", password => "secret");

my $msg = $ldap->search(base => $base, filter => $filter, scope => $scope, attrs => \@attrs);
my @entries = $msg->entries();

foreach my $entry (@entries) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach my $attr ($entry->attributes()) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach my $val ($entry->get_value($attr)) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print "$attr<>$val\n";
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
}

两段代码是完全一样的,除了使用的模块。这两个模块的用户接口部分几乎是完全相同的。程序只是执行了一个简单的bind和一个简单的搜索,共搜索到2个结果,每个entry有3个attributes。是一个非常简单的搜索了。

py 发表于 2009-11-29 16:29

从测试结果上看,Net::LDAPxs模块要比Net::LDAP快上将近30倍。但Net::LDAPxs仍然在开发阶段,并没有稳定下来,如果要求稳定性的话可以继续使用Net::LDAP。如果大家有什么使用上的问题欢迎讨论。

redicaps 发表于 2009-12-22 11:15

这个模块就是版主开发的吧

py 发表于 2009-12-24 07:24

Net::LDAP其实是非常好用的,但忍受这个模块奇慢无比。我已经忍受了很多年了,现在终于有机会彻底改进Perl连接LDAP的性能了。模块仍然处在开发阶段,一些功能还不完整,错误肯定也不少,但我会不断更新。
Net::LDAP实在慢的不能容忍,目前的工作需要我用一个更有效率的方式使用LDAP。

Perl_Er 发表于 2012-11-22 20:56

回复 1# py


    现在这个模块成熟了没有?还在维护吗?我最近需要使用,所以问一问

py 发表于 2012-11-23 06:14

回复 5# Perl_Er

这两年我在公司一直用,出过的bug都已经fix了。如果你有幸遇到问题可以直接联系我。

另外,这个模块目前存在的最大问题是安装。我只在Linux(x86/x64)的环境中编译过,其他平台没有做过安装测试。
   

Perl_Er 发表于 2012-11-23 15:02

回复 6# py


    ok. thx
页: [1]
查看完整版本: 使Net::LDAP性能提高30倍!