缓存静态表Mysql

本文关键字:Mysql 静态 缓存 | 更新日期: 2023-09-27 17:54:28

使用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客户端对DB运行此SQL时,需要大约3分钟才能拉出所有行。

读取这些数据到缓存的最好方法是什么,或者我应该做一些不同的事情?我可以把表直接缓存到MySQL缓存中吗?或者我应该将术语搜索直接发送到DB,而不是使用缓存中的数据。

缓存静态表Mysql

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

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

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