我正在开发用于进行在线调查的软件。当许多用户同时填写调查时,我在处理高数据库写入负载时遇到了麻烦。我当前用于存储调查数据的表(MySQL、InnoDB)具有以下列:dataID、userID、item_1 .. item_n。item_* 列具有不同的数据类型,对应于使用特定项目获取的数据类型。大多数项目列是 TINYINT(1),但也有一些 TEXT 项目列。大型调查可以有一百多个项目,导致一个包含一百多个列的表。用户在一篇 http 帖子中回答了大约 20 个项目,相应的行必须相应更新。用户可能会跳过很多项目,导致行中有很多 NULL 值。
我正在考虑以下解决方案来解决我的写入负载问题。我没有使用包含许多列的单个表,而是设置了与使用的数据类型相对应的几个表,例如:data_tinyint_1、data_smallint_6、data_text。这些表中的每一个都只有以下列:userID、itemID、value(value 列具有与其表对应的数据类型)。对于一个包含例如 20 个项目的 http 帖子,我可能必须在 data_tinyint_1 中创建 19 行,在 data_text 中创建 1 行(而不是更新具有许多列的大行)。但是,对于每个项目,我需要确定它的数据类型(通过两个表连接),以便我知道在哪个表中创建新行。使用这种方法,我的基于 zend 框架的应用程序代码将变得更加复杂。
我的问题:
- 对于繁重的写入负载,我的解决方案会更好吗?
- 你有更好的解决方案吗?