Java 使用SpringLDAP和ModifyAttribute增加时间

Java 使用SpringLDAP和ModifyAttribute增加时间,java,spring,ldap,Java,Spring,Ldap,我注意到,当我通过SpringLDAP调用modifyAttributes时,所需的时间会随着LDAP中对象的增长而增加。起初我认为是LDAP导致了这种情况,但在打开LDAP审核后,我注意到情况并非如此 当我在ldap objects seealsh属性中没有任何内容时,向其中添加内容大约需要200ms(在Java中,3ms是在ldap中测量的),然而,当我在seealsh属性中有大约1000个项目时,我在ldap审计中看到的时间大约为7秒(在Java中),不到1秒 我只能假设,出于某种原因,这

我注意到,当我通过SpringLDAP调用modifyAttributes时,所需的时间会随着LDAP中对象的增长而增加。起初我认为是LDAP导致了这种情况,但在打开LDAP审核后,我注意到情况并非如此

当我在ldap objects seealsh属性中没有任何内容时,向其中添加内容大约需要200ms(在Java中,3ms是在ldap中测量的),然而,当我在seealsh属性中有大约1000个项目时,我在ldap审计中看到的时间大约为7秒(在Java中),不到1秒

我只能假设,出于某种原因,这次添加的是SpringLdap。我是否可以进一步调查以了解真正的瓶颈在哪里,或者我是否可以优化SpringLdap以避免这种情况

DirContextOperations ctx = ldapTemplate.lookupContext(organizationalRole.getDn());    
ctx.addAttributeValue(LdapConstants.ATTR_SEEALSO, applicationRoleDN.toString());
ldapTemplate.modifyAttributes(ctx);

我想知道您看到的是不是SpringLDAP实现了一些错误检查

大多数目录(eDirectory、Active Directory,可能还有OpenLDAP)都不允许向多值属性添加相同的值两次

也就是说,不能让MV attr acmeMyList的值为1974,然后再向其添加第二个值1974。这是一个错误案例

随着值数量的增加,检查此项的成本也会增加,这符合您的模型


通常,索引属性会影响性能。事实证明,如果任何对象上的属性值超过25,eDirectory将自动为您添加索引。这是因为维护索引的成本低于向属性添加值的成本。

我想知道您看到的是SpringLDAP是否实现了一些错误检查

大多数目录(eDirectory、Active Directory,可能还有OpenLDAP)都不允许向多值属性添加相同的值两次

也就是说,不能让MV attr acmeMyList的值为1974,然后再向其添加第二个值1974。这是一个错误案例

随着值数量的增加,检查此项的成本也会增加,这符合您的模型


通常,索引属性会影响性能。事实证明,如果任何对象上的属性值超过25,eDirectory将自动为您添加索引。这是因为维护索引的成本低于向属性添加值的成本。

结果表明,有代码记录了我们从LDAP返回的响应。随着对象的增长,记录日志的时间也在增加。一旦消除了这一点,我们的问题也就解决了


作为第二步,我还检查了代码,并确保我们现在使用AttributesMapper执行任何查找/搜索/searchForObject,以确保我们不会总是查询整个对象的LDAP,而只查询我们感兴趣的属性。

结果是,有代码记录了我们从LDAP返回的响应。随着对象的增长,记录日志的时间也在增加。一旦消除了这一点,我们的问题也就解决了

作为第二步,我还检查了代码,并确保我们现在使用AttributesMapper执行任何查找/搜索/搜索对象,以确保我们不会总是查询整个对象的LDAP,而只查询我们感兴趣的属性