我需要一种解决方案,允许我跟踪Web应用程序(PHP5 / MySQL5.7)中的每次单击(以及链接的链接和日期)。最简单的解决方案显然是一个简单的表:
CREATE TABLE stats_data (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
log_date DATETIME NOT NULL DEFAULT NOW(),
link VARCHAR(512) NOT NULL
)
我并不是这样的表现如何扩展性能,因为预期的点击量每天可能超过10000 。
答案 0 :(得分:1)
主要取决于您的用例。您希望在此数据集上运行哪些查询?
我肯定会推荐一些面向文档的数据库(如Redis或MongoDb),但正如我所说,这取决于你将如何使用你的数据。
如果您想坚持使用MySQL,我就如何使该解决方案更可靠提出一些建议。
答案 1 :(得分:1)
我猜你可以将链接放在一个单独的表中,并将你的表引用作为外键。应尽可能加快速度,例如检查特定链接的点击次数。
根据您对数据的准确程度,您还可以将其聚合到maby中的另一个表中,进行某种类型的夜间运行操作(计划的sp应该起作用)。 通过这种方式,您可以拥有一个表格,例如您可以查看在特定时间间隔,一天或一小时内点击链接的次数,或满足您需求的任何内容。我已经在工作中使用了这种方法,我们在负载非常繁重的应用程序中存储Web服务调用的统计数据,并且它一直工作正常,没有任何性能问题。
答案 2 :(得分:0)
有几个人认为你可以做些以确保表现:
log_date
列以便按日期范围(https://dev.mysql.com/doc/refman/5.5/en/column-indexes.html)log_date
列(https://dev.mysql.com/doc/refman/5.6/en/partitioning-types.html)创建分区 通过按日期列分割数据,您可以按小时/天/周/月/年“分离”数据......无论您想要什么......
示例:
CREATE TABLE members (
firstname VARCHAR(25) NOT NULL,
lastname VARCHAR(25) NOT NULL,
username VARCHAR(16) NOT NULL,
email VARCHAR(35),
joined DATE NOT NULL
)
PARTITION BY RANGE( YEAR(joined) ) (
PARTITION p0 VALUES LESS THAN (1960),
PARTITION p1 VALUES LESS THAN (1970),
PARTITION p2 VALUES LESS THAN (1980),
PARTITION p3 VALUES LESS THAN (1990),
PARTITION p4 VALUES LESS THAN MAXVALUE
)
因此,想象您按周分类数据,当您使用日期等于'2016-08-25'的日志进行搜索时,该记录将仅搜索日期介于'2016-08-22'之间的日志'2016年8月28日'。
我希望这可以帮到你。