Jus*_*mes 5 c# mysql asp.net-mvc caching entity-framework
使用MYSQL,使用EF 5.x和MVC3.我有一个大约320万行的表,有城市,乡村组合.我在客户端有一个自动完成文本框,它接受城市的搜索词并使用jQuery/ajax发回建议.
我面临的挑战是,当我第一次使用它时,我将这个表缓存到我的内存中:
CityData = DataContext.Citys.OrderBy(v => v.Country).ToList();
if (CityData.Any())
{
// Put this data into the cache for 30 minutes
Cache.Set("Citys", CityData, 30);
}
Run Code Online (Sandbox Code Playgroud)
即使我将db-context超时设置为5分钟,这也会超时.当我使用MySQL客户端对数据库运行此SQL时,需要大约3分钟来拉取所有行.
将此数据读入缓存的最佳方法是什么,或者我应该做些不同的事情?如果是这样,我可以将表直接缓存到MySQL缓存中吗?或者我应该将术语搜索直接发送到DB而不是使用缓存中的数据.
同意对你的问题的评论,我还建议,有这么多行,你可能会限制自动完成的回报?(即取前10名)。除非您尝试在每次击键时返回所有结果,否则到数据库的往返不应成为主要瓶颈。
如果这是一个瓶颈,我可能会通过在每次击键时对数据库进行异步调用来解决这个问题,同时继续过滤您已经在本地提取的结果。我认为,如果我正确理解您的意图/问题,那么在数据库中重新排序列表并重新查询会比尝试在代码中执行此操作所带来的性能损失更快地获得结果。
警告:我还没有处于这样的境地:到数据库的通用往返方法对于我的需求/自动完成中的数据量来说不够快——其他必须在这里解决性能问题的人可能能够提供额外的见解 - 有 Google 工程师在读吗?:)
归档时间: |
|
查看次数: |
593 次 |
最近记录: |