【发布时间】:2020-04-14 20:08:03
【问题描述】:
我有一个提供复杂统计/预测数据的 Web API。我有一个端点甚至可能需要 20 秒才能完成,因此我开始研究缓存以提高性能。我的情况与许多示例中描述的情况大不相同,所以我需要帮助。
长话短说,该方法返回项目的一批预测和统计信息。单品最快50ms,不错。但也有一种方法(非常复杂)需要一次 2000-3000 个项目来计算不同的统计数据。这是一个问题。
数据库中可能有大约 250,000 个项目,一张表中大约有 2 亿行。好的部分是:表每天只更新一次,我需要大约 1GB 的数据(大约 80M 的“优化”行)。
所以我的想法是,每天一次(我确切地知道什么时候)API 会查询、转换、优化该表中的 1GB 数据并将其放入内存,并且在白天,它会快速点亮。
我的问题是,这是个好主意吗?我应该使用一些外部提供程序(如 Memcached 或 Redis)还是只使用一个使用信号量等进行适当锁定的单例列表?
如果是 Memcache,我该怎么做?我不想“按原样”缓存此表。这个太大了。我需要先进行一些转换。
谢谢!
【问题讨论】:
-
我的意思是你不应该每天处理一次,也许你应该将作业分成许多块并并行处理,然后放入 RAM
-
@DmytroShabanov 但每天一次,整个表被删除,并插入全新的数据。
-
问题是,如果您需要处理大量数据,Memcached 并没有解决您的问题,它只是存储数据并加快获取请求。如果您需要处理,这应该在后台使用调度程序(石英或hangfire),因此用户可以获得预先计算的项目。
标签: c# asp.net-core caching redis memcached