C# 缓存静态表Mysql
使用MYSQL、EF5.x和MVC3。我有一张大约320万行的桌子,上面有城市、乡村组合。我在客户端有一个自动完成的文本框,它接受city的搜索词,并使用jQuery/ajax发回建议 我面临的挑战是,当第一次使用此表时,我会使用以下方法将其缓存到内存中:C# 缓存静态表Mysql,c#,mysql,asp.net-mvc,entity-framework,caching,C#,Mysql,Asp.net Mvc,Entity Framework,Caching,使用MYSQL、EF5.x和MVC3。我有一张大约320万行的桌子,上面有城市、乡村组合。我在客户端有一个自动完成的文本框,它接受city的搜索词,并使用jQuery/ajax发回建议 我面临的挑战是,当第一次使用此表时,我会使用以下方法将其缓存到内存中: CityData = DataContext.Citys.OrderBy(v => v.Country).ToList(); if (CityData.Any()) {
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);
}
即使我将db上下文超时设置为5分钟,此超时也会超时。当我使用MySQL客户端对DB运行此SQL时,大约需要3分钟来提取所有行
将这些数据读入缓存的最佳方式是什么?或者我应该做些不同的事情吗?
我可以直接将表缓存到MySQL缓存中吗?如果可以,如何缓存?或者我应该直接将术语搜索发送到DB,而不是使用缓存中的数据进行搜索。同意对您问题的评论,我还建议,由于行数太多,您可能会限制自动完成的返回?(即进入前10名)。除非您试图在每次击键时返回所有结果,否则往返到DB的过程不应成为主要的瓶颈 如果这是一个瓶颈,我可能希望通过在每次击键时对DB进行异步调用来解决这个问题,同时继续过滤您已经在本地提取的结果。我认为,如果我正确理解您的意图/问题,那么在DB中重新排序列表和重新查询比在代码中尝试这样做的性能影响更快
警告:我还没有遇到过这样的情况,即到DB方法的一般往返不够快,无法满足我在自动完成中的需求/数据量-必须在此处解决性能问题的其他人可能能够提供额外的见解-任何谷歌工程师阅读过吗?:) 如果是“自动完成”,您是否会有一个使用搜索词的查询,并且只获取相关结果?还是您希望搜索查询运行缓存的数据?@MikeSmithDev说得很好,您最好将单个查询缓存到数据库中。您可以将查询缓存很长一段时间,以便在一段时间后,大部分搜索不会进入数据库。您还可以选择将生成的json缓存为文件,这样,您只要在收到此类请求后立即返回json文件。是的,搜索项与缓存的数据不符。在实际表中搜索搜索搜索项是否存在问题,因此需要缓存版本?这个表有索引吗?如果SQL客户端中的查询需要3分钟。。。这有点麻烦。我认为不需要缓存。像这样一个简单的DB查询需要1毫秒左右的时间。不值得优化。再想一想——我会有点担心在性能问题真正成为问题之前尝试解决您预期的性能问题。根据我个人的经验,我浪费了很多时间试图编写聪明的代码来解决我最终没有遇到的问题。这是因为你在编写聪明的代码时解决了这些问题:)我很想相信。。。但这只会鼓励更多的不良行为:)