在更长的时间段和时区存储统计数据

时间:2013-04-02 10:10:35

标签: mysql database date database-design timezone

目前,我正在开发一个项目,用于计算数据并按ID将其存储在分析数据库中。

例如,阅读新闻文章的次数(因此有20个类别的数据存储为整数)。

我们将数据存储在以下字段中: int user_id int value_type_id int值 日期时间日期时间

我们使用4个表,x_hour,x_day,x_week,x_month 这样,我们就不必计算潜在的数千甚至数百万条记录中的数据。

需要动态计算数据并通过某些连接进行过滤。 这一切都没有问题,并且按预期工作并且速度令人满意。

接下来的问题。我们希望数据显示在查看它的用户的时区中,时区并不总是相同的,因为它可以是反对的,例如UTC-5或UTC + 4.

由于我们将日期存储在UTC上,因此如果在午夜前一小时存储活动,那么较大的时间间隔会将其视为昨天,即使它可能在同一天的同一天,因此我们在几天,几周和几个月的时间间隔存在问题。那个时区。

我已经阅读了解决方案,添加24列来保存每个时区的数据,是否有人有不同的解决方案。

2 个答案:

答案 0 :(得分:3)

继续以UTC格式存储日期时间。

将用户的时区传递给查询。

使用CONVERT_TZ功能转换SELECT

CONVERT_TZ(`datetimefield`, 'UTC', 'Europe/Amsterdam')

将“欧洲/阿姆斯特丹”替换为适当的时区。

您最好使用上述IANA时区字符串,而不是像“UTC-5”这样的偏移量,只要您拥有此数据即可。它将正确处理发生这种情况的地区的夏令时问题。

补充说明:https://dev.mysql.com/doc/refman/5.5/en/mysql-tzinfo-to-sql.html - 该程序用于使用时区数据初始化MySQL。

答案 1 :(得分:1)

似乎唯一的方法是使用15分钟的桶或精确定义的时区,因此只能获得大约40列。

然后我们在几周和几个月内都进行了相同的操作,因此我们为每个时区提供了正确的数据。

耗费更多时间并占用更多数据,但如果我们保持数据清洁,那么它可能是一个不错的解决方案。