高写表的表设计策略/

时间:2011-02-20 22:43:36

标签: database-design

我有一个日志表,记录用户在网站上执行的每个操作,点击等 所以每一秒都有成千上万的条目等着写。

我假设数据库一次只能写一行,它不能同时写多行?因此,我们假设有500,000个用户登录时发生了500,000个条目,现在每隔一个人都在移动,所以数据库可以处理每秒100,000行,平衡行会发生什么?

它是自动在队列中等待还是数据库发出写入错误,或者如果延迟是5分钟,它会等待5分钟来写入记录吗?

我可以将哪些技术/策略用于我的极高写表?我知道不要在这些桌子上使用FK。还有什么?

我的数据库是MySQL,应用程序是codeignitor。所有表都有innoDB引擎。

1 个答案:

答案 0 :(得分:1)

由于实际的日志记录可能不需要保持最新实时,我会利用消息队列将“日志”消息发送到另一个进程来写入它们。这样,当利用率在晚上或过夜减慢时,记录的处理最终会赶上来。

否则,您可能会遇到这样的情况:最终您的写入会超时,并开始阻止人们浏览您的网站。

我不是MySql专家,但如果它像SQL服务器一样工作,实际的客户端会向服务器发送命令,如果命令没有在设定的时间内完成,则事务超时并回滚。

使用日志文件方法具有相同的问题,因为所有线程都会尝试写入同一文件,并且磁盘争用可能是个问题。如果您将队列放在另一台服务器上,则可以扩展您的解决方案。