在效率方面,是将所有帖子创建一个表格,并为每个帖子保存创建该帖子的用户ID,还是为每个用户创建一个不同的独立表格,仅将该用户创建的帖子放在其中更好?
当您向数据库添加更多数据时,数据库布局不应更改,因此用户数据应该放在一个表中。
另外:
有多个表意味着您必须动态创建查询。
一个表格的缓存查询计划将不会用于任何其他表格。
在一个表格中有很多数据并不会对性能产生太大影响,但是拥有很多表格会影响性能。
如果想要为表格添加索引以加快查询速度,单个表格上的操作会更加容易。
回答具体问题,就查询效率而言,拥有小型表格肯定更好,因此按用户分表可能是最有效的。
但是,除非您有大量帖子和用户,否则这不太重要。即使有数百万行数据,只要正确放置索引,性能仍然很好。
我强烈反对按用户分表的策略,因为它会给解决方案增加很多复杂性。当您需要查找例如在一年内发布过某个主题的用户时,该如何查询?
需要优化时再进行优化,不要因为觉得或怕某些东西会运行缓慢而进行优化(即便需要优化,也有比按用户分表更简单的选项)。
通常情况下,拥有不同数量表格的模式是不好的。在您的帖子中使用单个表格。
user
列上添加一个索引,这样您就可以快速查找给定用户的所有帖子。根据您的应用程序要求,您可能还需要考虑添加其他索引。user
和单一的post
表,这是标准的做法。我对你的回答有类似但不同的问题,因为@guffa和@driis都假设“帖子”需要在用户之间共享。
在我的特定情况下:出于隐私原因,不能与任何其他用户共享单个用户数据点,甚至不能用于分析。
我们计划使用mysql或postgres,以下是我们团队正在争论的三个选项:
N个模式和5个表 - 我们的一些开发人员认为这是保持数据完全隔离的最佳方向。 优点-如果您将模式视为文件夹,将表视为文件,则复杂性较小。我们将为每个用户拥有一个模式 缺点-大多数ORM会对每个模式进行连接池
1个模式和nx5个表 - 一些开发人员喜欢这种方式,因为它允许连接池,但似乎使问题更加复杂。 优点-ORM中可以进行连接池 缺点-找不到设置此类模型的ORM
1个模式和5个表 - 一些开发人员喜欢这种方式,因为他们认为我们从缓存中受益。
优点:ORM很高兴,因为这就是它们设计的方式 缺点:每个查询都需要用户名表
就编程而言,我个人属于第一派:n个模式。我的主要开发者属于第三派:1个模式5个表。
缓存: 如果数据始终是1:1,无论我们使用什么解决方案,我都看不出缓存如何有助于提高性能,因为每个用户都会搜索不同的信息。
有什么想法吗?
[database] "table for each"
搜索,可以找到很多关于这个问题的不同解决方案。 - Matposts(user_id)
或类似字段上创建索引。如果您有一个模式和一些需要快速运行的示例查询,最好告诉我们该模式和这些查询,并询问我们应该存在哪些索引。 - Dan D.