我们有以下 MySQL 数据库表,其中包含大约 75,000 个条目。表中的每个条目都代表系统中的一个符号,可以为其检索更多数据。出于自动完成目的查询此表 - 用户查找一个符号,然后将其与符号的名称或其标签(分号分隔的字符串列表)匹配。当用户选择正确的符号时,会获取相关数据。这是表的描述:
CREATE TABLE `symbols` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(512) NOT NULL,
`tags` varchar(512) DEFAULT NULL,
`type` enum('1','2','3','4','5','6','7','8','9') NOT NULL,
`popularity` int(11) DEFAULT '0',
PRIMARY KEY (`id`),
UNIQUE KEY `uc_symbol_name` (`type`,`symbol`),
KEY `symbol_idx` (`symbol`),
KEY `type_popularity_idx` (`type`,`popularity`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
上表与大量数据一起存储在后端机器上,后端机器通过 JSON API 提供这些数据。目前,我们的前端 JavaScript 代码直接在 AJAX 中查询后端服务器以进行自动完成。相反,为了加快速度,我们希望在提供前端服务的服务器上创建符号表的本地缓存版本(前端是用 django 编写的)。这是可能的,因为该表包含不到 100,000 个符号,并且该表大约每分钟更新一次。此外,它将允许我们实现更好的匹配算法,如 Levenshtein 距离。
您将如何创建这种类型的缓存符号表?显然,查找必须在代码中进行(可能是 Python),但是您将如何存储数据,以及如何每分钟同步一次?我们在 django 前端服务器上运行了一个 Redis 服务器,但这引入了持久性问题......任何想法都非常欢迎!