Mysql 考虑客户';从数百万行中删除时区

Mysql 考虑客户';从数百万行中删除时区,mysql,bigdata,web-analytics,Mysql,Bigdata,Web Analytics,假设我有一个存储访问者(网站访问者)信息的表。假设表结构由以下字段组成: 身份证 访客id 访问时间(以UTC为单位存储为毫秒,自 ‘1970-01-01 00:00:00’) 此表中有数百万行,并且仍在增长 在这种情况下,如果我想查看来自任何时区的报告(日与访客),那么一个解决方案是: 解决方案#1: 获取报表查看器(即客户端)的时区 根据客户的时区,汇总此表中的数据 逐日显示结果 但在这种情况下,性能会下降。另一种解决方案可能是: 解决方案#2: 使用忽略客户端时区的预聚合表/摘要表 但

假设我有一个存储访问者(网站访问者)信息的表。假设表结构由以下字段组成:

  • 身份证
  • 访客id
  • 访问时间(以UTC为单位存储为毫秒,自 ‘1970-01-01 00:00:00’)
  • 此表中有数百万行,并且仍在增长

    在这种情况下,如果我想查看来自任何时区的报告(日与访客),那么一个解决方案是:

    解决方案#1:

  • 获取报表查看器(即客户端)的时区
  • 根据客户的时区,汇总此表中的数据
  • 逐日显示结果
  • 但在这种情况下,性能会下降。另一种解决方案可能是:

    解决方案#2:

    • 使用忽略客户端时区的预聚合表/摘要表
    但在这两种情况下,性能和正确性之间都有一个权衡

    解决方案#1确保正确性,解决方案#2确保更好的性能


    我想知道在这个特定场景中的最佳实践是什么?

    当您进入分布式系统、用户和各种数据源之间的匹配事件时,处理时间的问题会出现

    我强烈建议您确保所有日志记录系统都使用UTC。这允许从位于世界任何地方的任何种类的服务器(这些服务器都希望与当前UTC时间的视图保持同步)进行收集

    然后,当请求传入时,您可以将用户时区转换为UTC。在这一点上,您有相同的决定——执行实时查询,或者访问以前汇总的一些数据

    您是否希望提前聚合数据将取决于一系列事情。其中一些可能需要减少保存的数据量、减少支持查询的处理量、执行查询的频率,甚至减少构建系统的成本与可能看到的使用量

    关于最佳实践——保持显示特征(如时区)独立于数据处理

    如果你还没有,确保你考虑了你所保存的数据的生命周期。您是否需要10年的备份数据?希望不会。当不再需要旧数据时,您是否有剔除旧数据的策略?你知道如果你存储每一条记录(用不同的流量增长率估计),你将拥有多少数据吗

    同样,大型数据集的最佳实践是了解如何处理数据的大小,以及随着数据的老化如何管理数据。这可能涉及长期存储、删除,或者可能简化为摘要形式

    哦,还有一个矩阵类比,从“正确性”的角度来说,真正能让你大开眼界的是,正确性在这里不是问题。每个时区在各自的时区内对“一天”内的交通有不同的看法,并且每个时区都是“正确的”。即使是那些与你的时区不同的奇怪时区,调整也不仅仅是以小时为单位