【问题标题】:NCache query performance issuesNCache 查询性能问题
【发布时间】:2013-01-20 16:33:01
【问题描述】:

我正在评估 NCache 在正在进行的项目中作为“通读”缓存的用途 - 以便从 SQL 服务器中减轻负载。
在客户端,该项目有一个轮询例程,用于接收按上次轮询日期时间过滤的项目(在服务器端)。
轮询以固定间隔在单独的线程中发生。
客户端伪代码
1)第一次获取:

  1. 获取所有现有项目
  2. LastHandledDate 设置为现在

2) 非首次获取(轮询线程)

  1. 获取在 LastHandledDate 之后创建的现有项目
  2. 更新 LastHandledDate 到现在

在服务器端,当收到轮询查询时,会执行以下伪代码:

  1. 在 NCache 中查询所有具有 CreationDate >= LastHandledDate 的匹配项
  2. IF 查询结果为空
    1. 查询 SQL 数据库以查找具有 CreationDate >= LastHandledDate 的所有匹配项
    2. 如果查询不为空,则使用 SQL 查询结果更新 NCache
    3. 返回 SQL 查询结果
  3. ELSE 返回 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 等分布式缓存?

【问题讨论】:

    标签: c# server-side load-testing ncache


    【解决方案1】:

    尝试为您的课程使用查询索引

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多