目前,我的数据库设计尚未标准化.
当用户访问网站时,将存储所有数据,例如完整的浏览器名称,操作系统名称等.这导致数据库以每天约10GB的速度快速增长,每天只有200万人(每天200万次插入).但是,这仅意味着每个数据只有一个插入.我正在使用mysql和php.
现在我想知道如果对数据进行归一化是否会更快.我的意思是为OS名称和OS ID,浏览器名称和浏览器ID创建单独的表.然后使用流量日志表中的ID.
在这种情况下,将在浏览器表和os表中进行两次查找以查找ID,如果不存在,则在流量日志表中进行两次插入,然后再进行一次插入,分别使用浏览器ID和os ID.因此,有2个选择和2个潜在插入和1个设置插入.
哪一个可能更快.对于基于文件的方法,还有其他选项可用于存储os等,或者将所有可能的浏览器,os都存储在数组中,然后仅在访问者具有其中一个浏览器或os的情况下才插入,否则仅将其放在其中.
解决方法:
您实际上是在讨论速度与空间的关系.与将大量批量数据插入单个表相比,更复杂的表结构可能会慢一些.在这种情况下,通常认为牺牲一点速度来降低数据库大小的增长速度是适当的;用您描述的方式对表格进行规范化应该可以提供这种折衷.
此外,将数据拆分为多个表并进行交叉引用将使您以后可以更轻松地对数据进行查询,例如是否确定要对网站用户进行分析.