在postgres中使用动态模式

时间:2017-08-08 20:45:18

标签: ruby postgresql filtering jsonb dynamic-schema

我必须决定如何实现动态模式。我会尝试将更多描述放在我的问题所在。

我在最新版本中使用postgres DB,应用程序是用Ruby和Hanami编写的。我需要实现视图,我将在我们的应用程序中显示用户列表(表视图)。首先要求它需要包含动态数据。例如,用户具有name和birth_date,我将此数据存储在Users表中。在其他表中,我存储与用户相关的指标,例如观看次数和评论。这只是数据的一部分。我有更多与我的用户相关的表,我需要将它们加入到一个视图中。它听起来不是很有活力。我知道。但我有另一个要求。我想允许用户将自定义列添加到我的表视图中。

此时我们的表格包含以下预定义列:

name, birth_date, number_of_views, number_of_comments 

我们可以添加一些自定义的。

现在变得充满活力。这不是结束。我需要在这些列上添加过滤。因此,例如,如果给定的用户具有我前面提到的列,我应该允许对所有这些列进行过滤(预定义和自定义)。我正在尝试研究如何实现此功能。

现在问题部分:)我正在考虑如何存储这些数据。我正在考虑将其存储为我的postgres中的JSONB列。这个规模大约是5kk的用户。所以这意味着这个表中有5kk行。没那么多。我想知道使用动态过滤器过滤这些数据。我尝试为5kk表做一些基准测试,如果我使用分页(没有索引),它运行良好。为了查询整个数据集,它需要10秒,因此并不完美。

问题

  1. JSONB好主意吗?我不确定如果我能动态过滤这些数据我可以定义正确的索引(每个查询可以不同)。如何为这种情况定义索引?
  2. 最好将预定义列存储为表中的普通列,而只存储JSONB中的自定义列?它会给我带来任何利润吗?
  3. 我应该使用postgres吗?我不相信postgres对于这种规模来说不够好,我宁愿不改变工具。
  4. 感谢所有答案。我对动态模式没有丰富的经验,所以每个技巧都很有用; P

1 个答案:

答案 0 :(得分:0)

我建议使用像mongoDB这样的NoSQL数据库。您的问题陈述需要无模式的文档存储,以支持快速读取。具有强大支持的MongoDB或Couchbase