C# NCache查询性能问题

C# NCache查询性能问题,c#,server-side,load-testing,ncache,C#,Server Side,Load Testing,Ncache,我正在评估NCache在正在进行的项目中作为“读通”缓存的使用情况,以便从SQL server中卸下负载。 在客户端,项目有一个轮询例程,该例程接收按上次轮询日期时间筛选的项目(在服务器端)。 轮询以固定的间隔在单独的线程中进行 客户端的伪代码 1) 首次提取: 获取所有现有项目 将LastHandledDate设置为现在 2) 非第一次获取(轮询线程) 获取在LastHandledDate之后创建的现有项 将LastHandledDate更新到现在 在服务器端,当接收到轮询查询时,将执行以下伪

我正在评估NCache在正在进行的项目中作为“读通”缓存的使用情况,以便从SQL server中卸下负载。
在客户端,项目有一个轮询例程,该例程接收按上次轮询日期时间筛选的项目(在服务器端)。
轮询以固定的间隔在单独的线程中进行
客户端的伪代码
1) 首次提取:

  • 获取所有现有项目
  • 将LastHandledDate设置为现在
  • 2) 非第一次获取(轮询线程)

  • 获取在LastHandledDate之后创建的现有项
  • 将LastHandledDate更新到现在
  • 在服务器端,当接收到轮询查询时,将执行以下伪代码:

  • 查询CreationDate>=LastHandleDate的所有匹配项的NCache
  • 如果查询结果为空
  • 查询SQL数据库中CreationDate>=LastHandleDate的所有匹配项
  • 如果查询不为空,则使用SQL查询结果更新NCache
  • 返回SQL查询结果
  • 否则返回NCache查询结果
  • 要查询NCache,我使用它的linq提供程序,该查询类似于SQL查询:

    SELECT * FROM Messages WHERE Message.SessionId = 1234 AND Message.EntryDate >= ‘2012-10-6’
    
    编辑:在测试期间,在客户端有一个线程以恒定速率添加新项目

    服务器端部分托管在web服务(IIS中的WCF)中。
    在用100个客户端对上述轮询设置进行了大约一个小时的负载测试后,我注意到web服务执行的每秒请求数稳步下降

    运行上述设置时,只从NCache读取数据,而不进行SQL读取(服务器端伪代码中没有第2段),会产生相同的每秒请求数下降模式

    我有几个问题:

    • NCache的查询性能似乎取决于缓存中对象的总数。类似的解决方案(NoSQL/分布式缓存)是否也是如此
    • 哪个NoSQL/分布式缓存解决方案针对查询速度进行了优化
    • 也许在NCache中,查询可以进行更优化
    • 也许我遗漏了一些东西——而且我的分布式缓存使用模式不正确——在我的用例中如何有效地使用分布式缓存(如NCache)

    尝试为您的类使用查询索引

    我正在使用缓存中的100k项(每个项大小约为250kb),并且没有任何性能问题