3

我们的 LDAP 和 Java 服务器存在一些性能问题。每当我们调用 LDAP 查询时,它看起来像这样(&(objectclass=person)(department=0128)(departmentNumber=1))大约需要 2000 毫秒,这对我们来说太慢了。

但是,如果我们使用标准 LDAP 浏览器(例如来自网络的 LDAP Admin 程序)使用相同的查询执行搜索,则只需几毫秒。

我们的简化代码如下:

public static void main(String[] args) throws NamingException {


    Hashtable<String, String> env = new Hashtable<String, String>(); // NOPMD

    env.put(Context.PROVIDER_URL, "ldap://abc123.muc:389");
    env.put(Context.SECURITY_PRINCIPAL, "CN=myproject,OU=projectusers,DC=COM");
    env.put(Context.SECURITY_CREDENTIALS, "asdf");
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.SECURITY_AUTHENTICATION, "simple");

    LdapContext iLeanLdapCtx = new InitialLdapContext(env, null);

    //TIME TO CREATE CONTEXT = 40ms

    String filter = "(&(objectclass=person)(department=0128)(departmentNumber=1))";


    NamingEnumeration<SearchResult> results = iLeanLdapCtx.search("O=computers,DC=COM", filter, null);

    //TIME TO SEARCH WITH FILTER = 2000ms

    NamingEnumeration<SearchResult> results2 = iLeanLdapCtx.search("O=computers,DC=COM", filter, null);

    //2nd TIME TO SEARCH WITH FILTER = 2000ms
}

这里有一些初始化问题吗?

我认为实例化 LdapContext 应该已经解决了所有时间密集的问题。ldapCtx.search大约需要 2 秒,如果我再次调用它,仍然是 2 秒。所以最初的搜索似乎没有做任何初始化。即使查询只是那么慢,为什么我使用的其他 LDAP 浏览器会这么快呢?

4

0 回答 0