【问题标题】:Running an analytics website....1 heavy insert vs several light selects and inserts运行一个分析网站....1 重插入与几个轻选择和插入
【发布时间】:2011-07-21 18:57:58
【问题描述】:

目前我的数据库设计没有标准化。

当用户访问网站时,所有数据(例如完整的浏览器名称、操作系统名称等)都会被存储。这导致数据库以每天约 10GB 的速度快速增长,每天只有 200 万人(每天 200 万次插入)。然而,这只意味着每个数据只有一个插入。我正在使用mysql和php。

现在我想知道如果我对数据进行规范化是否会更快。我的意思是为操作系统名称和操作系统 ID、浏览器名称和浏览器 ID 创建单独的表。然后使用流量日志表中的 id。 在这种情况下,将在浏览器表和 os 表中查找 id 的两个查找,如果它们不存在,则在流量日志表中插入两个插入,然后另一个插入带有浏览器 id 和 os id。所以 2 个选择和 2 个潜在插入和 1 个集合插入。

哪个可能更快。还有其他用于存储操作系统等的基于文件的方法的选项,或者可能将所有可能的浏览器、操作系统存储在数组中,然后仅在访问者具有这些浏览器之一或操作系统时才插入,否则只需将它们作为无。

【问题讨论】:

    标签: mysql database logging reporting analytics


    【解决方案1】:

    您真正关注的是速度与空间的问题;与将大量批量数据插入单个表相比,更复杂的表结构可能会慢一些。在这种情况下,为了降低数据库大小的增长速度而牺牲一点速度通常被认为是合适的;以您描述的方式规范化表格应该提供这种折衷方案。

    此外,将数据拆分为多个表并进行交叉引用将使您以后可以更轻松地查询数据,例如,如果您决定要对访问您网站的用户进行分析。

    【讨论】:

    • 但是,预计这两个选项之间会有多大差异?另外,如果我每次检查它们的存在以增加浏览器的计数器时都以标准化形式选择和更新 os 和浏览器表,那么它会增加多少……我绕过每秒 30-50 个请求,这在规范化形式的第二个选项中加起来会产生很多查询
    • @Anush:在这些级别处理 SELECT 和 UPDATE 请求完全在 MySQL 的能力范围内;通常开始更多地影响 MySQL 的是大型数据库大小,听起来您的原始(未更改)选项会更快开始接近。此外,这两个选项之间的区别在于使用了大量的存储空间与使用的性能非常少;显然,我会选择少量的性能,特别是因为随着您的扩展,存储问题可能会很快变成性能问题。
    • 感谢您的出色回答...您知道吗,我会给您投票并选择您的答案。
    • Wanush:乐于助人;希望它被证明是有用的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    • 1970-01-01
    • 2014-01-31
    • 1970-01-01
    • 2016-06-30
    • 1970-01-01
    相关资源
    最近更新 更多