缓存静态表Mysql

时间:2013-01-18 16:01:12

标签: c# mysql asp.net-mvc entity-framework caching

使用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);
        }

即使我将db-context超时设置为5分钟,也会超时。当我使用MySQL客户端对数据库运行此SQL时,需要大约3分钟才能获取所有行。

将此数据读入缓存的最佳方法是什么,或者我应该做些不同的事情? 如果是这样,我可以将表直接缓存到MySQL缓存中吗?或者我应该将术语搜索直接发送到DB而不是使用缓存中的数据来执行它。

1 个答案:

答案 0 :(得分:0)

同意对您的问题的评论我还建议,在这么多行中,您可能会限制自动完成的回报? (即进入前10名)。除非您尝试在每次击键时返回所有结果,否则往返DB的往返不应成为主要瓶颈。

如果它是一个瓶颈,我可能会通过在每次击键时对数据库进行异步调用来解决这个问题,同时继续过滤你已在本地提取的结果。我认为你会得到更快的结果重新排序数据库中的列表并重新查询,而不是试图在代码中执行此操作的性能 - 如果我正确理解您的意图/问题。

警告:我还没有处于这样一个位置:数据库方法的通用往返还不够快,无法满足我在自动完成中的需求/数据量 - 其他人不得不在这里解决性能问题或许可以提供额外的见解 - 任何Google工程师阅读? :)