存储较长时间和时区的统计数据



目前我正在研究一个计算数据并按ID在分析数据库中存储的项目。

例如,一篇新闻文章被阅读的次数(因此,大约有20类数据存储为整数)。

我们按照如下方式将数据存储在字段中:int user_idint value_type_idint值日期时间

我们使用4个表,x_hour, x_day, x_week, x_month这样我们就不需要计算几千甚至几百万条记录的数据了。

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

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

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

我读过的解决方案是添加24列来保存每个时区的数据,有人有不同的解决方案吗?

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

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

SELECT中转换,使用CONVERT_TZ函数:

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

其中'Europe/Amsterdam'被替换为相应的时区。

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

进一步说明:https://dev.mysql.com/doc/refman/5.5/en/mysql-tzinfo-to-sql.html

这个程序用来初始化MySQL的时区数据。

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

然后我们必须对天、周和月做同样的事情,这样我们就有了每个时区的正确数据。

有点耗时和占用更多的数据存储,但如果我们保持我们的数据干净,这可能是一个足够体面的解决方案

相关内容

  • 没有找到相关文章

最新更新