[英]Java - jndi ldap slow search
我們正在使用javax.naming.ldap.LdapContext連接和查詢openLdap。
問題在於我們將com.sun.jndi.ldap.LdapSearchEnumeration作為結果,並且使其循環確實很慢,例如每秒5個SearchResult。
我也嘗試了apache ldap api和im獲得相同的時間,除非我帶來較少的歸因,但仍然很慢。 要獲得180個結果,需要10秒鍾。
jndi ldap的代碼示例:
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://aplivolatil....:389");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "uid=usuarioLector.....");
env.put(Context.SECURITY_CREDENTIALS, "9IVNOaQmEeE");
env.put(Context.BATCHSIZE, "1000");
env.put(Context.REFERRAL, "ignore");
LdapContext contexto;
try {
//contexto = new InitialLdapContext(env, null);
contexto = new InitialLdapContext(env, null);
SearchControls controlesBusqueda = new SearchControls();
String [] attrs = new String [] {"cn"};
controlesBusqueda.setReturningAttributes(attrs);
controlesBusqueda.setSearchScope(1);
NamingEnumeration<SearchResult> resultadosObjetos = contexto.search("cn=usuarios-......",
"(&(objectClass=inetOrgPerson))", controlesBusqueda);
while (resultadosObjetos.hasMore()) {
resultadosObjetos.next();
}
因此,經過調查和幾次測試,我們發現將jndi ldap環境屬性“ batchsize”設置為1000,則將相同的延遲分配給搜索方法,而不是循環結果時。 從某種意義上講,api可能會在每個next()上進行ldap。 但是,為什么這么多延遲呢?
隨着rootDN變得非常快(1秒),用戶im用於搜索會出問題嗎? 顯然不是rootDN?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.