我必须为我们的用户管理工具创建一个批量插入功能。我们使用 Spring LDAP 构建了一个小型内部库,并且对于单用户管理 (CRUD) 来说一切正常。
我想尝试一次插入数百条记录并在出现问题时回滚。
有没有办法像在数据库中一样在 LDAP 中创建事务?
谢谢你的想法。
我必须为我们的用户管理工具创建一个批量插入功能。我们使用 Spring LDAP 构建了一个小型内部库,并且对于单用户管理 (CRUD) 来说一切正常。
我想尝试一次插入数百条记录并在出现问题时回滚。
有没有办法像在数据库中一样在 LDAP 中创建事务?
谢谢你的想法。
这是@adrianboimvaser 的后续行动。
请注意,Spring LDAP 事务支持不使用 XA 事务,而是使用“逻辑”补偿事务,因此 LDAP 的回滚将是对 LDAP 的补偿动作。虽然这是对无事务的改进,但请注意,这与“就像它存在于数据库中”的典型事务不同。即不支持事务的ACID属性。
请注意,即使使用相同的逻辑事务,这也不是 JTA XA 事务;不会执行两阶段提交,因此提交和回滚可能会产生意想不到的结果。
例如:如果您要向 LDAP 添加 100 个条目,则每条记录将一一添加到 LDAP。如果最后一次添加失败,则回滚操作将删除事务中先前创建的 99 个条目。但是,如果由于某种原因(例如,网络连接下降到 LDAP,这导致第 100 个条目失败)前 99 个条目实际上无法删除,那么即使您尝试回滚事务,您也会在数据库和 LDAP。即 LDAP 中将有 99 条记录(因为它们无法删除)在数据库中不存在(因为这些记录从未插入或实际回滚)。
我不确定您的情况是什么,但如果您经常对 LDAP 进行大量更新,您可能需要考虑使用实际数据库来避免事务头痛以及优化性能,因为 LDAP 是为快速读取和相对较慢的写入而设计的。