0

我们需要解析已序列化到 PostgreSQL 数据库中的 YAML 配置,该数据库托管在 heroku 上。

包含我们需要的数据的表目前大约有 250 万行,但可能会很快增长。

YAML 数据本身只包含简单的配置数据,带有一些散列和一些小数组。

我们需要能够以最快的方式从我们的 Rails 应用程序中检索 YAML 数据,该应用程序也将托管在 heroku 上。检索数据的最佳方法是什么?

简单地遍历数据库并动态反序列化 YAML 数据就足够了吗?还是我们应该创建一个新表来存储反序列化的配置数据?此外,PostgreSQL 对这种任务是否足够快,还是我们应该研究另一个数据库?例如nosql?

4

1 回答 1

0

哇。首先,PostgreSQL 是一个非常快速的关系数据库。但是,虽然将 YAML 作为文本存储在数据库中并没有错,但您真正在做的(我假设)是将结构化数据(YAML)存储在单个字段中。如果数据是有规律的结构化的,即大部分包含相同的字段和值,那么它应该作为结构化数据存储在关系数据库中。如果它是结构松散的数据,那么键值存储机制(无论是某种 NoSQL 数据库,还是就此而言,文件系统)可能确实值得考虑。

如果您正在遍历数据库并反序列化整个记录集,全部为 2.5M 并且还在增长,那么您已经将它们存储在内存中,所以像memcached(Rails 支持的缓存存储之一)这样的工具可能是一个很好的解决方案. PostgreSQL 可能适合存储数据,除非它很大——如今 250 万条记录并不是一个大数字,而且进行全表扫描很可能不会成为限制因素——更有可能是 CPU将 YAML 反序列化为 ruby​​ 哈希/数组。

但是你真的需要一次内存中的所有 2.5M+ 记录吗?为什么不根据需要获取它们?当您说“最快的方法”时,答案取决于需要快速的方法。如果您愿意等待几秒钟让您的应用程序加载,然后从那里自行管理数据(可能在发生更改时存储更改,处理锁定、并发等),那么是的,内存是去。如果您确实需要内存中最常用的 2500 条记录,那么标准的延迟加载缓存策略可能会很容易管理。

我认为您在实现方面提出了一个相当普遍的架构和设计问题。如果没有更完整地描述为什么,什么和你的限制是什么,我认为我或其他任何人都无法提供明确的答案。编辑问题以提供更多上下文和详细信息,也许您将能够获得更具体的答案。

于 2012-11-29T16:31:32.267 回答