我目前正在设计一个应用程序,用户可以在其中创建/加入组,然后在组内发布内容。我试图找出如何最好地将这些内容存储在RDBMS中。动态创建表以存储用户内容是否是个好主意?
选项1:为所有用户内容创建一个表。此表中的其中一列将是groupID,指定发布内容的组。使用groupID创建索引,以便快速搜索特定组内的内容。所有的内容读取/写入都会打到这张单独的表格。
选项2:每当用户创建一个新组时,我们都会动态创建一个新表。类似于group_content_ {groupName}。所有内容读取/写入将被路由到特定组的动态创建表。
优点为选项1:
- 它更容易搜索多个论坛的内容,用一个单一的简单的查询,对单个表进行操作。
- 由于内容表是静态的且定义明确,因此构建简单的交叉表查询会更容易。
- 由于只有一个表来维护,因此更容易实现模式更改和对索引/触发器等的更改。
赞成选项2:
- 所有的读取和写入操作将在众多的表来分配,从而避免可能导致大量的流量创下了单个表中的瓶颈(但无可否认,这些表仍然在一个单一的数据库中)
- 每个表的大小都会小得多,允许更快的查找,更快的模式更改,更快的索引等。
- 如果我们想在未来分割数据库,如果所有的数据已经被“分解”,那么就会更容易nt表。
从性能/开发/维护的角度来看,上述2个选项之间的一般建议是什么?
我与选项1去。但如果你担心性能使用分区https://www.postgresql.org/docs/10/static/ddl-partitioning.html –