簡體   English   中英

Java-Jndi ldap慢速搜索

[英]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?

Apache具有正在使用的LDAP API。 您可以在這里查看 不幸的是,此時文檔還不夠充實。 用戶指南上有很多頁面為空,但是您可以憑直覺和JavaDocs的一些幫助填補空白。

即使缺少良好的教程,我也曾經使用過此API,並且運氣還不錯。 我建議至少嘗試一下,看看情況是否有所改善。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM