【发布时间】:2012-11-13 05:41:46
【问题描述】:
所以,我有以下问题:
我正在做一些时间序列分析,并且我有一个模型,其中包含 10^7 个身份或 id(例如一个国家/地区的每部手机)。
每个 Id 都有关联的事件(例如天),最多可以跨越 10^4 个事件。对于每个事件和身份,都有不同的“属性”(例如电话 X 在那天 Y 发送的消息数)。
我正在尝试设计一个 mysql 数据库来处理如此大量的信息。我主要感兴趣的是查询时间分布(例如,特定日期的消息数量;或 X 天和 Y 天之间的活动电话数量)。
我的第一个想法是为每个不同的值使用一个表:在每个表上,行是一个标识,每一列都有一天。如果有 N 个不同的属性,那么我将有 N 个不同的表。这带来了每个表上有 10^4 列的问题;我不确定这是一种好的/标准/有效的做法。
1234563第三个事件的日期,接下来的列是该特定日期的该身份的相关属性。
我问你有什么建议:“出于历史原因”我已经创建了一个非 mysql 数据库(有很多很多 .txt 文件),在尝试迁移它之前,我想知道它是否真的值得.正如您可能理解的那样,目前我的 *.txt 数据库中的查询可能会尽可能昂贵:我通常必须打开每个 .txt 对查询执行的操作。对于每个查询,这相当于 10-30m。因此,任何低于该限制的建议实际上都对我的问题非常有用。
感谢您的宝贵时间, 豪尔赫
【问题讨论】:
-
在我看来,您正在尝试手动构建 OLAP 多维数据集。抱歉,我不熟悉 Mysql 为 OLAP 提供的工具,但我很确定它应该是市场上的东西。
-
可以在不使用 OLAP 的情况下实现。它看起来像一个简单的事件记录系统,有一个包含事件时间、设备 ID、事件类型和其他属性的大型“事件”表。如果不同的事件具有不同的元数据,那么您需要为每个事件类型创建一个表,并将其挂接到主事件表中。重要的是,“多对多关系不是单个表,而是(至少)三个表,以避免您建议的大量数据。
-
是的,这种多对多会更简单,因为每个身份只有一个“id”,没有更多信息,时间戳也是如此。不过谢谢,它有帮助。
标签: mysql database database-design