1

我有长达一周的 wifi 设备与我研究所的 wifi 路由器关联的原始日志。截至目前,我计划将其放入数据库中,如下所示:
一个包含列的大表:

  • 路由器 MAC 地址
  • 设备 MAC 地址
  • 时间戳

将仅查询数据库以检索特定设备在一周内的连接历史记录。
记录一周后,它将被删除或移动到其他地方。

现在设备的数量可能在 800 到 2000 之间。因此,为每个设备设置一个单独的表是没有意义的,不是吗?

我相信wifi路由器的数量约为<40。

最后,一周的日志将小于 1 GB。

我现在正在使用 SQL 数据库(真的坚持这个,不想改变,但如果它有很大的改进,请提及一个替代方案)。

现在我的问题是(一个表)方法在时间上是有效的 - 查询执行并返回结果的时间。 空间和冗余都不是问题,只是查询返回的速度*。

还要评论可以采取哪些可能的措施/修改来使这样的系统具有可扩展性。

*它不应该太复杂以至于难以维护。

4

2 回答 2

1

我认为您没有理由需要以任何其他方式将其拆分。如果您的唯一目的是存储带有日期时间戳的路由器和设备地址,那么您真的不需要做任何其他事情。一张桌子就可以了。

规范化背后的整个想法(是的,我在这里过度简化了)是您永远不必在多个表中一遍又一遍地重复相同的数据。

例如说你想存储这个:

Router | Mac Address | Device Type | IP Address | Device Model | Device Serial Number

最好有一个路由器/设备表来指定所有这些,并有一个特定的DeviceID和一个说

DeviceID | TimeStamp

您会这​​样做,这样您就不必每次都为每个日志条目重复所有信息。

希望这可以帮助...

于 2013-10-28T17:28:46.977 回答
1

由于您存储和删除数据的方式,我的建议是创建一个按时间戳分区的表。这种方法的好处:

  • 归档数据(删除分区、移动分区)的惩罚比大删除少。
  • 您正在查询的表大小会更小,因此查询应该更快(警告始终适用)。
  • 如果您按时间戳进行分区并在查询中使用该分区键,则约束排除将发挥作用,这意味着将查询包含您要查询的数据的分区,而其他分区将从计划中丢弃。

最重要的是,您可以使用专门为快速检索查询数据而设计的索引对多个列进行索引。由于没有 DDL、示例数据或查询(这可能是后续问题),因此目前无法说出这些索引的外观。使用 CLUSTERed 索引也会有所帮助,因为您有静态数据 (WORM)。

如果您需要快速查找 INET 类型(如果内置网络数据类型不够快),他们可以查看 IP4R 数据类型:http ://pgfoundry.org/projects/ip4r/

于 2013-10-28T18:09:00.477 回答