Mysql 在较长的时间段和时区内存储统计信息

Mysql 在较长的时间段和时区内存储统计信息,mysql,database,date,database-design,timezone,Mysql,Database,Date,Database Design,Timezone,目前我正在从事一个项目,该项目计算数据并将其按ID存储在分析数据库中 例如,一篇新闻文章的阅读次数(因此有20类数据存储为整数) 我们将数据存储在如下字段中: int用户标识 int值\类型\ id 整数值 日期时间日期时间 我们使用4张桌子,x_小时,x_天,x_周,x_月 这样,我们就不必计算数千条甚至数百万条记录的数据 数据需要动态计算并通过某些联接进行过滤。 这一切都没有问题,按照预期工作,速度令人满意 接下来的问题。我们希望数据显示在查看它的用户的时区中,时区并不总是相同的,因为它可能

目前我正在从事一个项目,该项目计算数据并将其按ID存储在分析数据库中

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

我们将数据存储在如下字段中: int用户标识 int值\类型\ id 整数值 日期时间日期时间

我们使用4张桌子,x_小时,x_天,x_周,x_月 这样,我们就不必计算数千条甚至数百万条记录的数据

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

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

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


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

继续以UTC存储日期时间

将用户的时区传递给查询

中选择
,使用以下功能进行转换:

CONVERT_TZ(`datetimefield`, 'UTC', 'Europe/Amsterdam')
将“欧洲/阿姆斯特丹”替换为适当的时区

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

进一步说明:
-此程序用于使用时区数据初始化MySQL。

似乎唯一的方法是使用15分钟的存储桶,或精确定义的时区,因为这样只能得到大约40列

然后,我们必须在数天、数周和数月内执行相同的操作,以便为每个时区提供正确的数据


要花费更多的时间并占用更多的数据存储空间,但如果我们保持数据干净,这可能是一个足够好的解决方案。

我不完全需要阅读下面的内容(完全不需要)。我需要知道的是,是否有一种适当的方法可以在更长的时间间隔内存储数据。例如,每日存储将包含一个日期,如:2013-03-29 00:00:00,这将是UTC。但它会为时区不同于UTC的人提供错误的数据。例如,我在格林尼治标准时间+1,如果我在当地时间00:30发布内容,系统将生成数据,告诉观众我前一天发布的内容。因为它是白天储存的。问题是,如果我继续使用小时数,系统在一个月或更长时间内的数据传输速度会太慢。我明白了,我建议在
中添加
,并从
datetime列中添加
,这些列表示每小时间隔的开始和结束,从而为每天等数据存储24行基于UTC的数据。然后,select将能够为给定的用户时间日检索正确的24行转换集。@bcmcfc-该解决方案仅在所有目标时区都有完整的小时偏移量时才有效。一些有30分钟的偏移,甚至有一对有45分钟的偏移。因此,如果你想要整个世界,你需要15分钟的增量存储桶。从那以后,你还没有找到任何其他解决方案?没有其他合适的解决方案,最好是让你的mysql和其他东西在SSD上运行,让一切都变快;)。但是没有其他的代码解决方案。Thx,你能展示一下你提到的这个表的设计示例吗(15分钟bucket+时区)?我没有选择15分钟bucket表,因为我使用的是codeigniter,我们使用的是这样的表:datetime,value,value\u type\u id,UM12,UM11至UTC至UP14您可能会更好地使用正常时区或进行整个定制设计,我的意思是我们7月4日UTC-12(UM12)时钟的数据与7月3日UTC+12(UP12)的数据相同,因此我们确实存储了一些双数据。但我想你明白了,我们现在有40列用于所有时区,并带有datetimestamp来表示该时区的时间。这并不是想引起骚动,但现代世界的大多数用户都受到DST的影响。忽略它意味着你给他们的数据与他们的期望不一致。有时这是可以的,但你似乎特别想要一个精确的解决方案。如果你还没有,请阅读-特别是“时区!=偏移量”。我不确定我是否明白你的意思。你是说你想根据事件在本地发生的时间来报告事件吗?不,我按天、小时、周和月来存储它们,因此我们需要40列时区,因为第20周的所有数据在时区+12中可能与在时区+0中不同。但它已经完成了。很久以前;)