ruby-on-rails - 键/值 Postgres SQL 表性能

标签 ruby-on-rails postgresql

我目前正在构建一个 Rails 应用程序,其中有一个“文档”数据表,用于存储对驻留在 S3 服务器上的 pdf 的引用。这些文档可能有 100 种不同的类型。每种类型最多可以有 20 个属性或元信息。

我的困境是我是为每种文档类型制作 100 个关系表,还是只创建一个引用 doc_id 的键/值数据表。

我的直觉告诉我要灵活地使用键/值来搜索和支持越来越多的文档类型,而无需创建新的迁移。但是,我知道这种技术存在缺陷。我首先关心的当然是 table 的大小。键/值表最终可能有数百万行。

另一方面,在全文搜索情况下,拥有 100 个属性表将是一场噩梦。

所以底线是,通过使用键/值,3 列 Postgres 表的性能可能有数百万行是一个扩展问题吗?另外,值字段上的联接怎么样?

顺便说一下,这个数据几乎永远不会改变。所以这将是 90% 的阅读。

最佳答案

考虑一个带有 hstore 列的表。它是一种专为存储键/值对而设计的 PostgreSQL 数据类型。

http://www.postgresql.org/docs/9.1/static/hstore.html

还有多个 Ruby gem 将 hstore 支持添加到 ActiveRecord。这是我写的:https://github.com/JackC/surus您还可以在 ruby​​ gems 中搜索大约十几个替代品。

关于ruby-on-rails - 键/值 Postgres SQL 表性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11423825/

相关文章:

ruby-on-rails - rails 3 : I want to list all paths defined in my rails application

ruby-on-rails - 开发重新加载后 Rails 单例变空

ruby-on-rails - rails、redis 和 node.js 的请求处理是如何异步的?

ruby-on-rails - 处理用户发送的 "string contains null byte"

postgresql - 根据两个字段过滤行,其中一个字段包含选择条件

javascript - 制作跨域API

ruby-on-rails - 滚动条和 rails : No route matches [GET] "/blog/wp-login.php"

postgresql - 为什么我在 postgresql 中看不到用户权限?

sql - 从 EC2 迁移到 RDS 后,Postgresql 查询速度降低 10 倍

ruby-on-rails - 在 Rails 中选择不同的 PostgreSQL 错误