Database 高数据量的数据库设计(2000万行/天)

Database 高数据量的数据库设计(2000万行/天),database,performance,database-design,Database,Performance,Database Design,我们希望创建一个从大量设备接收日志文件的软件。我们每天查看大约2000万行日志(每行日志2 KB/行) 我已经开发了很多软件,但从未使用过如此大量的输入数据。数据需要可搜索、可排序、可按源IP、目标IP、警报级别等分组 它应该结合相似的日志条目(发生6次等) 任何关于什么样的设计、数据库和总体思路的想法和建议都将不胜感激 更新: 发现这个演示,看起来像是一个类似的场景,对此有何想法? 看看这个,可能会有帮助 我看到了一些你可能需要考虑的事情。 1) 消息队列-删除日志行,并在时间允许时让系统的

我们希望创建一个从大量设备接收日志文件的软件。我们每天查看大约2000万行日志(每行日志2 KB/行)

我已经开发了很多软件,但从未使用过如此大量的输入数据。数据需要可搜索、可排序、可按源IP、目标IP、警报级别等分组

它应该结合相似的日志条目(发生6次等)

任何关于什么样的设计、数据库和总体思路的想法和建议都将不胜感激

更新:
发现这个演示,看起来像是一个类似的场景,对此有何想法?

看看这个,可能会有帮助

我看到了一些你可能需要考虑的事情。

1) 消息队列-删除日志行,并在时间允许时让系统的其他部分(工作人员)处理它

2) noSQL-reddis、mongodb、cassandra

我认为您真正的问题在于查询数据,而不是存储数据

此外,您可能还需要一个可扩展的解决方案。
一些noSql数据库是分布式的,您可能需要它。

我会根据用户选择数据子集的频率(按设备)做出许多决定?按日期?通过sourceIP?您希望将索引保持在最小值,并且只使用完成工作所需的索引

对于索引开销高但使用索引的值低的低基数列,例如警报级别,我建议使用触发器在另一个表中创建行,以标识对应于紧急情况的行(例如警报级别>x),这样警报级别本身就不必被索引,但您可以快速找到所有高警报级别的行

由于用户正在更新日志,您可以将早于“x”天的已处理/托管行从活动日志中移出并放入存档日志中,这将提高临时查询的性能

为了识别反复出现的问题(例如,同一设备上的同一问题,或同一ip地址上的同一问题,同一制造商生产的所有设备上的同一问题,或来自同一生产运行),您可以识别定义特定类型问题的列子集,然后创建(在触发器中)这些列中的值的散列。因此,相同类型的所有问题都将具有相同的哈希值。您可以有多个这样的列--这取决于您对“类似问题”的定义,以及您希望跟踪多少不同的问题类型,以及您需要登记哪些列来定义每种问题。如果您为哈希值列编制索引,您的用户将能够非常快速地回答以下问题:“我们经常看到这种问题吗?”他们将查看当前行,获取其哈希值,然后在数据库中搜索具有该哈希值的其他行。

对“Stackoverflow logging device data”的web搜索产生了几十个点击率


是其中之一。所问的问题可能与您的问题不完全相同,但您应该从回答中获得几十个有趣的想法。

是否需要一个数据库。多久查询一次?您需要多快的结果?Microsoft的LogParser允许您以SQL样式查询磁盘上的日志文件。将有数百名用户登录,查看和更新已解析的日志条目,以便“管理”每个日志条目。结果应该迅速显示出来。