【发布时间】:2012-05-08 15:47:06
【问题描述】:
我正在开发用于进行在线调查的软件。当许多用户同时填写调查时,我在处理高数据库写入负载时遇到了麻烦。我当前用于存储调查数据的表(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 列具有与其表对应的数据类型)。对于一个 http 帖子,例如20 项,然后我可能必须在 data_tinyint_1 中创建 19 行,在 data_text 中创建 1 行(而不是更新包含许多列的大行)。但是,对于每个项目,我需要确定它的数据类型(通过两个表连接),以便我知道在哪个表中创建新行。使用这种方法,我的基于 zend 框架的应用程序代码会变得更加复杂。
我的问题:
- 对于繁重的写入负载,我的解决方案会更好吗?
- 您有更好的解决方案吗?
【问题讨论】:
-
我认为这更像是一种微优化。现实情况是,您可能需要在问题上投入更多硬件。这是托管在共享主机上吗?您可能需要一个专用服务器和一个load-balanced mysql cluster。
-
我希望您会在数据库之前遇到 Web 服务器负载问题。
-
@SamDufel 你能多说一点吗?
-
@Wunibald 您是在猜测“重载”的真正含义,还是在您的平台上实际测量过它?即使是一个普通的 SQL 服务器也可以处理大多数人认为的“重负载”,但我们无法判断您是每分钟插入 100 条记录(这没什么)还是每秒插入 10,000 条记录(这更有趣)
-
@cilosis 该应用程序托管在虚拟专用服务器 ([servergrove.com/vps](ServerGrove VPS700)) 上。您可能是对的,专用服务器可以解决问题。
标签: php mysql database zend-framework server-load