6

我正在从事一个与网站访问者分析性质相似的项目。它将被数百个网站使用,每个网站平均每天有 10,000 到 100,000 次页面访问,因此数据量将非常大。

我应该使用带有 websiteid 的单个表还是为每个网站使用单独的表?

对拥有 100 多个网站的实时服务进行更改,每个网站都有单独的表格,这似乎是一个大问题。另一方面,性能和可扩展性可能会成为如此大数据的问题。欢迎任何建议、意见或建议。

4

5 回答 5

8

一张由网站 FK分区的表怎么样?

于 2009-03-02T10:17:51.330 回答
1

我会说根据您的数据使用最有意义的设计 - 在这种情况下是一张大表。

这些记录都是相同的类型,具有相同的列,因此从数据库规范化的角度来看,将它们放在同一个表中是有意义的。索引使选择特定行变得容易,尤其是当单个索引中的数据可以满足整个查询时(通常是这种情况)。

请注意,访问者分析必然涉及许多操作,除了一次对大量行进行操作外,没有简单的方法可以优化 - 例如:计数、总和和平均值。像这样的资源密集型统计数据通常是预先计算和存储的,而不是实时获取的。这是你想要考虑的事情。

于 2009-03-02T10:50:33.047 回答
1

如果数据统一,就一张表。如果您需要在具有多个表的所有网站上进行 SELECT 操作,那将是一件痛苦的事情。但是,如果您编写了足够多的脚本,则可以使用多个表来完成。

您可以使用 MySQL 的 MERGE 存储引擎跨表执行 SELECT(但不要期望良好的性能,并注意 Windows 对打开文件数量的硬限制 - 在 Linux 中,您可能必须使用 ulimit 来提高限制。有没有办法在 Windows 中做到这一点)。

我已经将一个巨大的表分成许多(数百个)表并使用 MERGE 来选择。我这样做是为了可以离线创建和优化每个小表。(例如 OPTIMIZE 或 ALTER TABLE...ORDER BY)。然而 SELECT 与 MERGE 的性能使我编写了自己的自定义存储引擎。(描述http://blog.coldlogic.com/categories/coldstore/'>这里)

于 2009-03-21T14:47:54.547 回答
1

使用单一数据结构。一旦你开始遇到性能问题,有很多解决方案,比如你可以通过网站 id 对表进行分区,也称为水平分区,或者你也可以使用复制。这一切都取决于读取与写入的比率。

但是首先要保持简单,并使用一个具有适当索引的表。您还可以确定是否需要交易。您还可以利用各种不同的 mysql 存储引擎,如 MyIsam 或 NDB(内存集群)来提高性能。缓存在从数据库中卸载负载方面也起着非常好的作用。大部分只读且易于计算的数据通常放在缓存中,缓存为请求提供服务,而不是进入数据库,只有必要的查询进入数据库。

于 2009-03-21T15:03:03.107 回答
0

除非您对 MySQL 有性能问题,否则请使用一张表。

这里没有人不能回答性能问题,你应该自己做性能测试来了解,一张大桌子是否足够。

于 2009-03-21T14:54:01.380 回答