【问题标题】:Caching Active Directory Data缓存 Active Directory 数据
【发布时间】:2010-09-07 04:33:03
【问题描述】:

在我的一个应用程序中,我正在查询活动目录以获取给定用户下方所有用户的列表(使用“直接报告”事物)。所以基本上,给定人名,在 AD 中查找,然后读取直接报告。但是对于每个直接报告,该工具需要检查直接报告的直接报告。或者,更抽象一点:工具会使用一个人作为树的根,然后沿着完整的树走,得到所有叶子的名字(可以是几百个)

现在,我关心的显然是性能,因为这需要做很多次。我的想法是手动缓存它(基本上只是将所有名称放在一个长字符串中并将其存储在某个地方并每天更新一次)。

但我只是想知道是否有更优雅的方法来首先获取信息然后缓存它,可能使用 System.DirectoryServices 命名空间中的某些东西?

【问题讨论】:

    标签: c# asp.net active-directory


    【解决方案1】:

    为了控制您想要缓存的属性,您可以调用“RefreshCache()”传递您想要保留的属性:

    System.DirectoryServices.DirectoryEntry entry = new System.DirectoryServices.DirectoryEntry();               
    
    // Push the property values from AD back to cache.
    
    entry.RefreshCache(new string[] {"cn", "www" });
    

    【讨论】:

      【解决方案2】:

      取决于您希望信息的最新程度。如果您必须拥有报告中的最新数据,那么直接从 AD 查询是合理的。而且我同意 AD 非常强大,典型的专用 AD 服务器实际上在日常日常操作中很少使用,但最好咨询您的 IT 部门/支持人员。

      另一种方法是使用每日脚本将 AD 数据转储到 CSV 文件和/或将其导入 SQL 数据库。 (Oracle 有一个 SELECT CONNECT BY 功能,可以在结果集中自动创建多级层次结构。MSSQL 可以通过一些递归 IIRC 来做类似的事情。

      【讨论】:

        【解决方案3】:

        AD 会为您进行这种缓存,因此除非性能成为问题,否则不要担心。我有软件在公司内部网上整天运行这种事情,每小时需要数千次点击,并且从未需要调整这方面的性能。

        【讨论】:

          【解决方案4】:

          Active Directory 在存储信息方面非常有效,而且检索不会对性能造成太大影响。如果您真的打算存储名称,您可能希望将它们存储在某种树结构中,这样您就可以看到所有人的关系。根据人数的多少,您不妨每天提取您需要的所有信息,然后针对您的缓存副本查询所有请求。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-08-13
            • 2015-02-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多