2012-02-27 72 views
0

我现在很忙的一个项目需要许多不同类型的统计数据,特别是在特定时间段内,产品详细信息页面的访问次数/浏览次数最为明显。这当然需要将每次访问存储在一张表中,例如,巨大的MySQL数据库统计存储 - 你有什么建议?

id | visit_date(这将是一个UNIX_TIMESTAMP())| product_id | ip_address(与国家相关的统计数据)

这种统计方式可以按照每个产品和每个城市/国家的选定时间段和(使用像MaxMind GeoIP这样的数据库)生成。

唯一的问题是这张表会很快填满数百万和数百万条记录。关于如何以最有效的方式处理这些问题的任何建议?

+2

“使用MongoDB,它是网络规模。” – 2012-02-27 12:00:22

+1

@ Simonatmso.net - 我认为ta.speot.is指的是http://www.mongodb-is-web-scale.com – 2012-02-27 12:28:53

回答

2

以下是一些建议:

  • 分区由RANGE http://dev.mysql.com/doc/refman/5.1/en/partitioning-range.html
  • 采取VISIT_DATE不是INT/BIGINT。在这种情况下使用TIMESTAMP,因为有与它一起工作的mysql函数,并且此数据类型采用相同的地方。然而,DATETIME使用更多空间,因为它不限于1970-01-01 ...
  • 删除旧记录(例如2天大)并在另一个表中汇总它们。
  • 也许你可以使用MEMORY存储引擎在这个表上速度更快,因为它不写入HD
  • 也许你可以使用memcached作为替代MEMORY存储
  • 不使用MyISAM,使用InnoDB的。
  • 调整你的my.cnf例如:http://tools.percona.com/wizard(注意,这不是一件很平凡的事情,你可以阅读关于这方面的书)
  • 明智地使用索引。

希望这会有所帮助。

1

我会使用TokuDB存储引擎为MySQL,提供其他优化中(分片等,寿立刻没有必要与Toku的)。

删除或存档记录到一个单独的MySQL实例(s),一旦它们变得不相关(应用程序开发人员关于失效时间确定的标准)。

一般来说,如果您因任何原因无法使用TokuDB,Stefan N在他的帖子中说了些什么。