免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5186 | 回复: 6
打印 上一主题 下一主题

[ldap] 使Net::LDAP性能提高30倍! [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-11-29 16:23 |只看该作者 |倒序浏览
尝试使用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。是一个非常简单的搜索了。

perl.png (107.06 KB, 下载次数: 56)

Net::LDAP的结果

Net::LDAP的结果

xs.png (96.2 KB, 下载次数: 56)

Net::LDAP的结果

Net::LDAP的结果

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
2 [报告]
发表于 2009-11-29 16:29 |只看该作者
从测试结果上看,Net::LDAPxs模块要比Net::LDAP快上将近30倍。但Net::LDAPxs仍然在开发阶段,并没有稳定下来,如果要求稳定性的话可以继续使用Net::LDAP。如果大家有什么使用上的问题欢迎讨论。

论坛徽章:
0
3 [报告]
发表于 2009-12-22 11:15 |只看该作者
这个模块就是版主开发的吧

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
4 [报告]
发表于 2009-12-24 07:24 |只看该作者
Net::LDAP其实是非常好用的,但忍受这个模块奇慢无比。我已经忍受了很多年了,现在终于有机会彻底改进Perl连接LDAP的性能了。模块仍然处在开发阶段,一些功能还不完整,错误肯定也不少,但我会不断更新。
Net::LDAP实在慢的不能容忍,目前的工作需要我用一个更有效率的方式使用LDAP。

论坛徽章:
0
5 [报告]
发表于 2012-11-22 20:56 |只看该作者
回复 1# py


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

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
6 [报告]
发表于 2012-11-23 06:14 |只看该作者
回复 5# Perl_Er

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

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

论坛徽章:
0
7 [报告]
发表于 2012-11-23 15:02 |只看该作者
回复 6# py


    ok. thx
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP