哇。首先,PostgreSQL 是一个非常快速的关系数据库。但是,虽然将 YAML 作为文本存储在数据库中并没有错,但您真正在做的(我假设)是将结构化数据(YAML)存储在单个字段中。如果数据是有规律的结构化的,即大部分包含相同的字段和值,那么它应该作为结构化数据存储在关系数据库中。如果它是结构松散的数据,那么键值存储机制(无论是某种 NoSQL 数据库,还是就此而言,文件系统)可能确实值得考虑。
如果您正在遍历数据库并反序列化整个记录集,全部为 2.5M 并且还在增长,那么您已经将它们存储在内存中,所以像memcached
(Rails 支持的缓存存储之一)这样的工具可能是一个很好的解决方案. PostgreSQL 可能适合存储数据,除非它很大——如今 250 万条记录并不是一个大数字,而且进行全表扫描很可能不会成为限制因素——更有可能是 CPU将 YAML 反序列化为 ruby 哈希/数组。
但是你真的需要一次内存中的所有 2.5M+ 记录吗?为什么不根据需要获取它们?当您说“最快的方法”时,答案取决于需要快速的方法。如果您愿意等待几秒钟让您的应用程序加载,然后从那里自行管理数据(可能在发生更改时存储更改,处理锁定、并发等),那么是的,内存是去。如果您确实需要内存中最常用的 2500 条记录,那么标准的延迟加载缓存策略可能会很容易管理。
我认为您在实现方面提出了一个相当普遍的架构和设计问题。如果没有更完整地描述为什么,什么和你的限制是什么,我认为我或其他任何人都无法提供明确的答案。编辑问题以提供更多上下文和详细信息,也许您将能够获得更具体的答案。