mysql - 运行一个分析网站....1 重插入 vs 几个轻选择和插入

标签 mysql database logging reporting analytics

目前我的数据库设计没有规范化。

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

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

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

最佳答案

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

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

关于mysql - 运行一个分析网站....1 重插入 vs 几个轻选择和插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6781233/

相关文章:

php - 页面加载时 SQL 调用过多?

Java JPA 负载平衡读取查询以读取 MySql DB 从站

ArchLinux中Mongodb无法导出数据

node.js - 无法在用 nodejs 编写并部署在 hyperledger-fabric 上的智能合约中打印日志

android - 在物理 Android 设备上运行 Ionic 应用程序时是否可以在 CLI 中读取日志

mysql - 如何开启mysql bin日志

java - Spring Boot 保存数据到数据库 休息 1 天

mysql - SQL 使用 group_concat 和每个串联项的计数而不是一行中的总计数

mysql - 查询获取订单量小于上一个订单量的客户列表

java - spring batch 根据批处理 id 记录到不同的日志文件?