评论(一次编写)存储网络信息的数据库设计

时间:2013-10-28 17:06:41

标签: sql database postgresql database-design

我有一个长达一周的wifi设备协会的原始日志到我的学院的wifi路由器。 截至目前,我计划将其放入数据库中,如下所示:
一个有列的大表:

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

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

现在设备的数量可能介于800到2000之间。因此,为每个设备分别设置一个表是没有意义的,还是这样?

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

规范化背后的整个想法(是的,我在这里简化它)是你永远不必在多个表中反复重复相同的数据。

例如,假设你想存储它:

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

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

的表
DeviceID | TimeStamp

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

希望这会有所帮助......

答案 1 :(得分:1)

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

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

除此之外,您还可以使用专门设计的索引对多个列进行索引,以快速检索查询数据。由于没有DDL,样本数据或查询(可能是后续问题),因此目前无法说出这些索引的样子。 使用CLUSTERed索引也可以提供帮助,因为您有静态数据(WORM)。

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