【发布时间】:2016-06-07 15:31:24
【问题描述】:
我们都知道MYSQL是关系型数据库;而在我将要编写的应用程序中,我需要使用关系数据库,主要是因为实体之间共享信息和表上的连接。
但我也有一个非常特殊的情况,我需要跟踪应用程序中发生的一些事件。例如,假设我有一个名为“XP”的字段的“用户”表,现在我想保留所有导致该用户“XP”更改的事件。
嗯,最简单的解决方案是创建一个新表并使用指向负责用户的字段存储事件。但是这个表变得非常大并且填充了不必要的行,从而降低了整个应用程序的速度。
如果我使用的是面向文档的数据库,这当然不是问题,但对于 MYSQL,这往往会使一切变慢。
我想在这里了解您对解决问题的可能方法的意见,同时仍将性能保持在合理范围内。我没有在网上找到任何相关的研究或文章。
PS,我有这样的想法,将更改保存为一个字段(“用户”表的)中的 JSON 数组,但是然后读取一个字段,将其从文本转换,添加一个项目并再次保存它是非常不切实际的。
谢谢
【问题讨论】:
-
除非您拥有大量数据,否则索引和分区可能会解决您的问题。
-
@GordonLinoff,好吧,戈登,每天会有 1 到 2 百万条记录。如果我们在一段时间后获得更多用户,可能会更多。数据很短,主要是一些整数。阅读很少见,仅用于报告和维护。但是由于这些事件发生在应用程序的不同部分,因此该表中的任何减速都会导致整个应用程序减速。我确信它不会让前几百万甚至数十亿行的事情变得糟糕,但最终呢?若干年后?我知道 MYSQL 不适合大表。至少不是在 4.x 和早期 5.x 时代。
-
每秒 15-30 次插入并不是非常大,MySQL 应该能够处理这个问题。至于随着表变大而对表产生影响,分区可能会解决这个问题。
标签: mysql relational-database document-oriented-db