我有一个应用程序需要对每个页面进行大量查询,这会使其速度变慢。
我曾尝试使用缓存系统(Redis),但实现起来有点复杂,而且需要花费时间,因为每个查询都依赖于很多依赖项。
我正在考虑在内存中再创建一个数据库克隆,该克隆应该是只读的,但每次数据库更新或插入时都应该更新内存行?您认为这是否有效且实用?如果是,目前是否有任何方法可以实现这一点,因为我正在使用 postgres。
我的第二个想法是对所有查询使用类似 Sphinx 搜索引擎的东西,在这种情况下,我需要使用实时索引。
这有效吗或者有更好的解决方案。
注意:数据库大小约为 50GB,我可以获得所有内存。
问候,,,
答案1
一般来说这不是一个聪明的主意。你看,数据库是由聪明人编写的,并使用尽可能多的内存进行缓存。如果你太频繁地访问磁盘,那么你就有内存问题——在同样有限的内存中保存另一份副本不会让事情变得更好。
应该做的是进行基线分析。瓶颈是什么?修复它。增加内存、SSD 是这里的典型步骤。哪些查询最昂贵?经验告诉我,你可能有一些造成很大破坏的锤子,问题不是“查询太多”,而是“索引到底是什么”。
但是内存数据库通常不会产生影响,因为任何有价值的数据库都已经将尽可能多的内存用作缓存。这是很自然的,除非某些管理员设置了极低的限制来“节省内存”,然后出现性能问题。
那么您真的应该从缓存开始。