【发布时间】:2018-01-31 02:21:33
【问题描述】:
我有大约 3MB 难以生成的信息。它结合了对一些非常大的表的连接查询和查询完成后的繁重处理。最重要的是,结果信息会被频繁读取(每个客户端每分钟 4-10 次,所有客户端都会读取 3000 次)。
我应该将该信息存储在单个键下的缓存中,还是应该在每次需要时将其分解并检索 N 个片段?
详情:
- 我不认为这是一个“基于意见的问题”,因为可以用代码证明存在更好/更坏的情况
- 我无法先发制人地知道哪个“碎片”将包含我需要的信息......将其视为银行对账单,银行经理可以在其中查找“转账”和“$ 1400.00”......因此我必须检索整个事物以进行进一步过滤/排序
- 数据不是扁平的,但不是那个嵌套的。大部分物品(大约 70% 只有 2 lvl,其余为 3 lvl)
- 我使用 Redis 作为缓存服务器和 c# - Asp.Net MVC 4
- 过滤是单一来源的,并应用于 4 个字段(尝试匹配 4 个字段上的值的单个搜索框)。
- 总是按日期排序
【问题讨论】:
-
这听起来像是典型的分析过程/数据仓库情况。生成的数据是否可以存储回一个或多个非规范化数据库表中,还是绝对需要缓存在内存中?
-
@KarlWenzel 我想说,由于数据访问的频率,缓存在内存中的性能比任何数据库解决方案都要高...原始估计指向每分钟超过 3000 次访问
-
如果没有数据库查询引擎来处理所有过滤/排序的优化和缓存,那么也许您可以构建自己的索引?也许您的代码中有一个支持虚拟数据表的代码库?您的数据是什么样的;是字段很多的平表,还是嵌套很多?
-
@KarlWenzel 它不是扁平的,但它不是 that 嵌套的......它最多向下 3 层,但嵌套的项目并不多......
-
好的,几分钟后我有一个会议,但我会回到这个。与此同时,也许有人会看到这些 cmets 并提出一些建议。您可以考虑将这些额外的详细信息连同您期望的过滤器/排序参数以及您使用的语言/网络平台一起放入您的原始问题中。
标签: performance caching scalability