我必须决定如何实现动态模式。我将尝试对我的问题进行更多描述。
我使用最新版本的 postgres 数据库,应用程序是用 Ruby 和 Hanami 编写的。我需要实现视图,我将在我们的应用程序中显示用户列表(表格视图)。这是第一个要求,它需要包含动态数据。例如,用户有姓名和出生日期,我将此数据存储在用户表中。在其他表中,我存储与用户相关的指标,例如查看次数和评论数。这只是数据的一部分。我有更多与我的用户相关的表,我需要将它们加入一个视图。听起来不是很动态。我知道。但我还有另一个要求。我想允许用户将自定义列添加到我的表格视图中。
此时,我们有一个包含以下预定义列的表:
name, birth_date, number_of_views, number_of_comments
我们可以添加一些自定义的。
现在它变得动态。这不是结束。我需要在此列上添加过滤。因此,例如,如果给定用户有我之前提到的列,我应该允许过滤所有列(预定义和自定义)。我正在尝试研究如何实现此功能。
现在是问题部分:) 我正在考虑如何存储这些数据。我正在考虑将它作为 JSONB 列存储在我的 postgres 中。其规模约为 5kk 的用户。所以这意味着该表中有 5kk 行。没那么多。我想知道使用动态过滤器过滤这些数据。我尝试为 5kk 表做一些基准测试,如果我使用分页(不带索引)效果很好。查询整个数据集需要 10 秒,所以并不完美。
问题
- JSONB 是个好主意吗?我不确定是否可以定义正确的索引,如果我将动态过滤这些数据(每个查询都可以不同)。如何为这种情况定义索引?
- 将预定义的列存储为表中的普通列并且仅在 JSONB 中存储自定义列是一个好主意吗?它会给我带来任何好处吗?
- 我应该使用 postgres 吗?我不相信 postgres 对于这种规模来说还不够好,我更喜欢不改变工具。
感谢所有的答案。我在动态模式方面没有丰富的经验,所以每个技巧都很有用;P