将PostgreSQL表加载到内存缓存中以在python / django中进行x维查找

时间:2019-03-27 04:00:10

标签: python postgresql caching memory

我正在使用Python / Django网络应用程序...并且我真的是第一次开始研究Python(通常我是.NET /核心堆栈开发人员)...当前正在PostgreSQL上运行后端。我有大约9-10个简单的(二维)查找表,这些表将非常非常频繁地实时命中,因此我想将它们缓存在内存中。

理想情况下,我想使用Postgres本身进行此操作,但是可能其他数据引擎和/或其他库将适合于此(我对Python库不是很熟悉)。

目标将是:

  1. 查找是在内存中处理的(数据占用空间永远不会很大)。

  2. 理想情况下,结果可以在第一次提取(通过完整的参数签名)后进行缓存以优化时间,尽管这在我看来假设内存中的查找无论如何都会非常快,但是这是可选的。

  3. 也是可选的,但理想情况下,即使查找表是出于导入/人类可读性/编辑目的而单独存储在数据库中的,但我认为生成加载到内存中的查找的x维数组会最佳。尽管总共有大约9-10个查询表,但每个表可能只有10-15个值(有些较小),而针对所有表的完整查找可能总共总共只有15个参数。基本上,它是一个方程式的9-10个表格...。因此,给定某些值,我们在每个表格中查找x / y值,获取该值,并将它们加在一起。

所以我想我正在寻找一个库和/或合适的后端来处理内存中的加载和缓存(同样,此内存中的内存总大小永远不会成为一个因素)...并且可能会自动将x查找表解析为单个内存x维表以提高效率(而不是单独进行9-10个查找)....并在所有参数均与上一个查询匹配时将这些结果缓存以重复使用(除非查找执行得如此之快,这是无关紧要的)。

查找表并不庞大...我要说的是,如果我编写代码以分解每个x / y值/范围并手动创建一个巨型x维查找表,则最终可能会发现15字段和150行的记录...所以我们讨论的数据不是很多。...但是它会被非常非常频繁地击中,我不想每次都针对实际的数据库执行这些查找。

对于最适合此功能的引擎/库的建议(偏爱仍然能够使用postgresql进行持久存储)的建议深表感谢。

1 个答案:

答案 0 :(得分:0)

您无需执行任何特殊操作即可实现这一目标:如果您经常使用这些表,PostgreSQL将使它们自动保留在缓存中。

如果您需要从一开始就对高速缓存中的表进行哈希处理,请使用pg_prewarm。它允许您将某些表显式加载到缓存中,并可以自动恢复上次关闭之前的缓存状态。

一旦表被缓存,它们只会在您写入表时引起I / O。

您构想的高效内存数据结构听起来像是对我的过早微优化。我敢打赌,这些小的查询表不会引起性能问题(如果您在所有外键上都有索引)。