Php 对于依赖于时间的大型数据集,命名表2010年9月11日是否可以接受且有效?

Php 对于依赖于时间的大型数据集,命名表2010年9月11日是否可以接受且有效?,php,mysql,database,database-design,Php,Mysql,Database,Database Design,我每天需要存储大约73200条记录,包括3个数据点:id、日期和整数 我的团队中的一些成员建议使用月份作为表名创建表(2010年9月),而其他人则建议使用一个包含大量数据的表 有没有关于如何处理这些数据量的建议?谢谢 =========谢谢您的反馈。取决于您需要进行哪些搜索。如果通常受日期限制,则可以进行拆分 如果你真的分裂了,考虑将表命名为FooY2010*09,这样表将按字母顺序排序。看起来应该是很好地保持一个表中的所有内容。将来维护1个表将使检索更加容易,而不是每年维护12个表。以每天73

我每天需要存储大约73200条记录,包括3个数据点:id、日期和整数

我的团队中的一些成员建议使用月份作为表名创建表(2010年9月),而其他人则建议使用一个包含大量数据的表

有没有关于如何处理这些数据量的建议?谢谢


=========谢谢您的反馈。

取决于您需要进行哪些搜索。如果通常受日期限制,则可以进行拆分


如果你真的分裂了,考虑将表命名为FooY2010*09,这样表将按字母顺序排序。

看起来应该是很好地保持一个表中的所有内容。将来维护1个表将使检索更加容易,而不是每年维护12个表。以每天73200条记录的速度,您需要将近4年的时间才能达到100000000条记录,这仍然在MySQLs的功能范围内。

您的数据库平台是什么

在SQL Server 2K5+中,可以按日期进行分区


糟糕的是,我没有注意到标签@不过Taiko是对的,这完全在MySQL的能力范围内。我认为这取决于数据的使用方式。如果大多数查询都是在完整的数据上完成的,那么总是将表重新连接在一起将是一种开销。 如果您大多数时候只需要一部分数据(按日期),那么最好将表分割成更小的部分

对于命名,我将使用tablename_yyyymm

编辑:当然,你还应该考虑DB和你的应用程序之间的另一层,根据给定的日期处理分段表。这会变得非常复杂。

绝对不会。
这将破坏表之间的关系。
基于字段值而不是表名构建的表关系

特别是对于这个每年仅增长300 MB的表,我建议不要这样做。我称之为元数据Tribbles。它造成了多个问题:

  • 你需要记住每年创建一个新表,否则你的应用程序就会崩溃
  • 无论年份如何,都很难根据所有行查询聚合
  • 更新日期可能意味着将行从一个表移动到另一个表
  • 很难保证多个表中伪密钥的唯一性
我的建议是将它保存在一个表中,直到并且除非您已经证明表的大小正在成为一个真正的问题,并且您无法以任何其他方式解决它(例如缓存、索引、分区)

我的团队中的一些成员建议使用月份作为表名创建表(2010年9月),而其他人则建议使用一个包含大量数据的表


别听他们的。您已经存储了一个日期戳,那么不同的月份如何分割数据呢?引擎可以很好地处理较大的数据集,因此按月拆分只能人工隔离数据。

因此,在100天内,您将有730万行,大约每年2500万行。2500万排已经不多了。MySQL可以处理数百万行的表。这实际上取决于您的硬件、查询类型和查询频率


但是您应该能够对该表进行分区(如果MySQL支持分区),您所描述的是一种旧的SQL Server分区方法。在构建这些月表之后,您将构建一个视图,将它们连接在一起,使其看起来像一个大表。。。分区基本上就是这样做的,但它都是隐蔽的,并且完全优化的。

通常这会带来更多的麻烦,需要更多的维护,您的查询需要更多的逻辑,而且从多个时段提取数据是痛苦的

我们在一个(MyISAM)表中存储了2亿多条基于时间的记录,查询速度仍然惊人

您只需要确保在时间/日期列上有一个索引,并且您的查询使用该索引(例如,在日期列上使用date_格式或类似格式的查询可能不会使用索引。我不会为了检索性能而将它们放在单独的表中


对于如此大量的记录来说,一件非常痛苦的事情是,当您必须删除旧数据时,这可能需要很长时间(例如,在具有数百行竖梃的表中擦除一个月的数据,需要10分钟到2小时)。因此,我们有表,并使用时间维度(例如,请参阅时间维度表)用于管理期间的关系表,而不是简单的日期/日期时间列或表示日期的字符串/VARCHAR。

我建议删除年份,每月只使用一个表,以月份命名。每年通过重命名所有表$month\uu$year并重新创建月份表来存档数据。或者,因为您正在存储一个ti对于您的数据,只需将其添加到相同的表中即可。我认为,由于您首先提出了这个问题,按月份隔离数据符合您的报告要求。如果不符合要求,则我建议将所有数据保存在一个表中,并在性能达到要求时定期归档历史记录这是一个问题。

我同意这种想法,不必要地使数据库复杂化。使用一个表。正如其他人所指出的,它几乎没有足够的数据来进行无关的处理。除非使用SQLite,否则数据库将能很好地处理它

但是,这也取决于您希望如何访问它。如果旧条目确实只是出于存档目的而存在,则存档模式是一种选择。版本控制系统通常会将不经常使用的数据分离出来。在您的情况下,您只希望所有内容都>1年移出主表。这是严格意义上的dDatabase管理任务,而不是应用程序行为。应用程序将