Velocity CTP:我们可以“搜索”对象吗?

时间:2010-06-04 22:42:18

标签: appfabric

菲尔,我非常感谢你的答案。

关于我关于地区的问题,我试图掌握API的功能,而不是服务/应用程序/平台的体系结构或基础结构。

因此,我试图确定在未知精确密钥或希望返回多个具有相关或类似密钥的对象时返回对象的能力有哪些限制。

当我检查API时,我没有看到任何“查询语言”,并且看起来接近我上面描述的功能的唯一命令与“区域”相关联。

从围绕如何在平台中实现区域的描述的术语,我推断(正确或不正确?)当定义(创建?)区域时,它将仅部署在多个缓存中的单个缓存服务器上AppFabric的多服务器实现中的服务器。

也就是说,在我看来,正在描述的是AppFabric中的“命名空间”[区域]对于AppFabric平台展示的任何“索引”功能至关重要。并且这个“命名空间”只能在单个服务器的边界内实现,有点像SharePoint Search最初是单服务器的,后来又在多个服务器上启用。

把所有这些放在一起,我猜测搜索依赖于基于区域的索引功能,因此“可搜索”键必然会导致“可搜索”区域中缓存的所有数据都放在一个区域中的限制,这将导致单个服务器上某个区域的数据“集中”。

我的问题是为了确认或澄清我的理解。

到目前为止,你已经回答了我的许多问题,但不是那个问题。

谢谢,

金博尔

“标签”似乎允许我们将“搜索词”与放置在Velocity缓存空间中的对象相关联。

但是,这些只能在“地区”内查询。

此外,区域以某种方式将缓存中对象的位置限制为单个服务器(或者可能是类似的东西)。

因此,这似乎很难执行任何操作,缓存项的唯一ID不会持久存储,也不会持续可用于存储和从缓存中检索对象的应用程序。

在任何情况下,我都看不到一种简单的方法来“清理”对象的缓存或在整个缓存中查找可能在缓存键中共享一些前缀,后缀或中缀值的对象,以便我可以清除例如,在单元测试中重复创建的对象的缓存。

我不确定区域与单个服务器缓存位置相关联的后果。

所以我对以下问题的任何帮助表示感谢:

  1. 使用区域时“分布式缓存”(称为“分区缓存”)和“本地缓存”之间有什么区别?
  2. 1.A。特别是,通过配置为“查看”整个缓存空间的缓存工厂可以看到分布式缓存中面向区域的值吗?

    1. 创建和删除“区域”的操作是否足够有效,为每个需要缓存的对象包创建一个区域和一组标记是否合理?
    2. 2.A。或者这只是推动了“搜索对象”的问题,因为DataCache对象能够通过区域和标记向下查询,只能查询对象本身的缓存键。

      谢谢,

      Stato

1 个答案:

答案 0 :(得分:1)

Release Candidate(以及后来的测试版)中,在添加带有标签的项目时使用区域的要求已被解除(尽管我有一种潜在的怀疑,即在封面下有一个调用{{ 1}}和实际的区域正在使用。但请注意,我在周末玩Release Candidate,当您尝试根据标签/标签集检索对象时,您需要提供区域名称。

在什么情况下你会在缓存中有一个没有唯一ID的对象某处?例如数据库密钥,AD guid等。

就“清理”缓存而言,如果您使用区域,则使用ClearRegion方法,或者您可以删除该区域,该区域将从缓存中删除区域内的所有对象。您可以创建一个扩展方法,该方法对密钥进行模式匹配,并将其与GetObjectsInRegion和GetSystemRegions方法相结合,以使用密钥中的某个标记查找缓存中的所有对象,但我认为这将是可怕效率低下,因为您必须遍历每个项目来检查密钥。

  

1a上。 a之间有什么区别   '分布式缓存'(称为   '分区'缓存??)使用时   区域和“本地缓存”?

AppFabric中的(可选)本地缓存与“中央”缓存不同,因为它位于应用程序内部。每当您从“中央”缓存请求缓存对象时,该对象就会缓存在本地缓存中。对该对象的后续请求将从本地缓存中完成。在AppFabric服务器与应用程序服务器不同的体系结构中,这可以节省网络跃点。

  

1b中。尤其是   面向区域的价值观   分布式缓存通过a可见   配置为的缓存工厂   '看'整个缓存空间?

我不太清楚我理解您对这个问题的看法,可以访问集群中所有服务器的AppFabric客户端(AppFabric术语中的路由客户端)根据定义可以访问缓存中的每个区域。或者你担心的是相反的情况,例如:如果您的客户端只能访问群集中的服务器子集,但是从服务器上的某个区域请求对象,则该对象无法直接访问?在这种情况下,客户端有权访问的服务器将从另一台服务器上的区域中检索该对象,并将其传递回客户端。

  

1c上。是创建和的操作   删除“区域”足够有效   创造它是合理的   每个区域和一组标签   需要的一堆对象   缓存?

区域设计用于保存一组对象,例如产品,客户,因此cache.GetSystemRegionName方法,而不是在临时基础上创建区域我认为最好一次创建它们,比如在ASP.NET应用程序中的Application_Start。然而,标签非常有效,因为它们或多或少只是字符串。