最佳做法,PHP,每天跟踪数百万次展示

Mic*_*key 7 php mysql logging

我需要做些什么来实现每秒20k mysql插入(在高峰时段,在较慢的时间内大约1k /秒)?我一直在做一些研究,我已经看到了"INSERT DELAYED"建议,写入平面文件,"fopen(文件,'a')",然后运行chron作业将"所需"数据转储到mysql等我也听说你需要多个服务器和"负载均衡器",这是我从未听说过的,做这样的工作.我也一直在关注这些"云服务器"的东西,它们的自动可扩展性,但不确定实际可扩展性.

该应用程序只是一个跟踪器脚本,所以如果我有100个网站每天可以获得300万次页面加载,那么每天将有大约3亿次插入.数据将通过一个每15-30分钟运行一次的脚本运行,该脚本将规范化数据并将其插入另一个mysql表中.

大狗怎么做?小狗怎么做的?我再也买不起庞大的服务器了,所以任何直观的方式,如果有多种方式可以实现,你聪明的人可以想到......请让我知道:)

Ano*_*on. 5

大狗怎么做?

多台服务器.负载均衡.

小狗怎么做的?

多台服务器.负载均衡.

您真的想要保存插入并将它们批量推送到数据库.20k个单独插入一秒钟是顶部的一个掠夺者,并且每一秒简化为一个大插入消除了大部分.


cle*_*tus 5

有两种方法:

首先,您将达到需要对数据进行分区或分片以将其拆分到多个服务器的程度.这可以像server1上的AC,server2上的DF一样简单,依此类推.

其次,推迟写入数据库.而是直接使用beanstalkd或memcached写入快速内存存储.让另一个进程收集这些状态并将聚合数据写入数据库.定期将这些记录合并为摘要数据.


mon*_*ksy 2

这很让人佩服。我的大部分数据都是一次性大量插入的。我发现的一件事是,批量插入比单独插入要好得多。此外,表、索引等的设计与插入速度有很大关系。使用 cron 和批量插入的问题是边缘情况。(当它去做插入时)。

另外还有平面文件。将插入内容写入文件时,您很容易遇到并发问题。如果您正在写入 1k+ 插入,因为当文件写入出现问题时,您很快就会遇到大量冲突和丢失。