我们应该在mysql中动态创建的表中拆分数据还是使用其他dbms?

slwdgvem  于 2021-06-20  发布在  Mysql
关注(0)|答案(2)|浏览(280)

当前设计:

Table: users
------------------------------
| id | email                 |
------------------------------  
| 1  | abc@xyz.com           |
| 2  | def@mno.com           |
| 3  | fun@ton.com           |

Table: user_notes
-----------------------------------------------------
| id | user_id  | content     | created_at          |
-----------------------------------------------------
| 1  |    1     | loreum ipsu | 2017-01-01 10:00:00 |
| 2  |    1     | loreum ipsu | 2017-01-02 11:00:00 |
| 3  |    2     | loreum ipsu | 2017-01-03 12:00:00 |

拟定设计:

Table: users
------------------------------
| id | email                 |
------------------------------  
| 1  | abc@xyz.com           |
| 2  | def@mno.com           |
| 3  | fun@ton.com           |

Table: user_1_notes
------------------------------------------
| id | content     | created_at          |
------------------------------------------
| 1  | loreum ipsu | 2017-01-01 10:00:00 |
| 2  | loreum ipsu | 2017-01-02 11:00:00 |

Table: user_2_notes
------------------------------------------
| id | content     | created_at          |
|-----------------------------------------
| 1  | loreum ipsu | 2017-01-01 10:00:00 |

我之所以提出这种设计,是因为我发现我们的mysql服务器(1cpu3.7gbgooglecloudsql)在运行了大约1亿行之后变得非常慢 user_notes 我们还可以创建将近40亿个表。
我们可以增加示例,这肯定会提高性能,但我们没有预算。我还没有进行性能测试。但我认为最好问问Maven群体
关于以上设计的利弊。
另外,如果我有预算,那么什么是实现同样目标的最佳方法呢
只需启动mysql服务器
转向其他技术,如云扳手、mongodb等。
或者其他。。。
更新
慢速查询(1分23秒)

SELECT * FROM user_tables WHERE user_id=2 AND DATE(created_at) >= '2017-01-01' AND DATE(created_at) < '2017-02-01'

注:
我对用户注解表的所有查询都是 WHERE user_id=XXX 我从不需要同时查询2个或更多用户

zbsbpyhn

zbsbpyhn1#

1.你目前的设计比提议的设计好得多
2.我的建议如果你有预算的话,那就增加mysql服务器
3.我不认为技术变革是明智的决定

ffscu2ro

ffscu2ro2#

你有索引吗 user_id ? 也许你可以从那里开始。
建议的设计可能不是一个好主意,或者你使用mysql,mongodb或者其他的解决方案。
例如,在mongodb上,您应该尽可能嵌入文档,这意味着您最好使用以下内容:

Collection: users
{
  id: 1,
  email: abc@xyz.com,
  notes: [
    {
      content: 'loreum ipsu',
      created_at: '2017-01-01 10:00:00'
    },
    ...
  ]
}

然后,根据每个用户的笔记数量(可能很多),您必须知道文档大小限制(16mb,我上次听说)。所以,也许你现在的设计可能没那么糟糕。
如果你最终选择了这条路线,mysql现在也有一个类似mongodb的文档库,但是,我不确定googlecloud是否支持它(我不这么认为)。所以,最终,也许你不需要“转向其他技术”。
免责声明:我在mysql工作(但我不是模式设计Maven)

相关问题