2

この LDAP クエリは瞬時に実行されます。

"Find all groups which user1 is not member"
(&
    (objectclass=groupOfNames)
    (!(member=cn=user1))
)

これは次のとおりです。

"Find these groups"
(&
    (objectclass=groupOfNames)
    (|(cn=group1) (cn=group2) (cn=group3) ...  )
)

しかし、このように組み合わせると、数分の処理で済みます。

"From these groups, find all which the user1 is not a member"
(&
    (objectclass=groupOfNames)
    (!(member=cn=user1))
    (|(cn=group1) (cn=group2) (cn=group3) ...  )
)

LDAPサーバーが結合されたクエリでチョークする理由がわかりません。何ができるか考えていますか?

それが役立つ場合、サーバーは Novell eDirectory です。

4

1 に答える 1

1

結果が出るまでに数分かかるのはおかしい。数百万以上のオブジェクトがありますか?

1 つの可能性として、検索 1 はツリーの 1 つのパーティション内のみを検索し、検索 2 は別のパーティション内のみを検索し、両方を組み合わせると明らかに両方を検索します。これらのパーティションに複製します。

また、次のバリアントを試してみてください。

(&

  (&
    (objectclass=groupOfNames)(!(member=cn=user1))
  )

  (&
    (objectclass=groupOfNames)(|(cn=group1) (cn=group2) (cn=group3) ...  )
  )

)

最初に問い合わせていた答えが得られるはずですが、少し簡単な方法です。

これで問題が解決しない場合は、クエリ対象のサーバーで ndstrace を実行し、クエリで正確に何を行っているかを確認してください。

要するに:

  1. 明らかに:NDSが正常であることを確認してください(ndsrepair、TID 3564075など)
  2. 両方のクエリが同じパーティションにあるかどうかを確認します
  3. サーバーに少なくともパーティションの読み取りレプリカがあるかどうかを確認します
  4. 提案どおりにクエリを変更してみてください
  5. クエリ中にndstraceを実行して、時間がかかるものを確認します
于 2017-07-14T12:30:51.987 に答える