5

使用 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 缓存中吗?或者我应该将术语搜索直接发送到数据库,而不是使用缓存中的数据。

4

1 回答 1

0

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

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

警告:我还没有达到数据库方法的通用往返速度不足以满足我的需求/自动完成中的数据量的位置 - 必须在这里解决性能问题的其他人可能能够提供额外的见解 - 任何谷歌工程师阅读?:)

于 2013-01-18T16:59:12.293 回答