【问题标题】:DB Design for high amount of data (20 millions rows / day) [closed]针对大量数据(每天 2000 万行)的数据库设计 [关闭]
【发布时间】:2011-07-01 19:21:01
【问题描述】:

我们正在寻求创建一个从大量设备接收日志文件的软件。我们每天使用日志查看大约 2000 万行(每个日志行 2kb/每行)。

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

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

任何关于什么类型的设计、数据库和围绕这个问题的一般想法的想法和建议都将不胜感激。

更新:
找到这个演示文稿,似乎是一个类似的场景,对此有什么想法吗? http://skillsmatter.com/podcast/cloud-grid/mongodb-humongous-data-at-server-density

【问题讨论】:

  • 是否需要是数据库。多久会被查询一次?您需要多快得到结果? Microsoft 的 LogParser 允许您以 SQL 样式查询磁盘上的日志文件。 codinghorror.com/blog/2005/08/microsoft-logparser.html
  • 将有数百名用户登录、查看和更新​​已解决的日志条目,因此每个日志条目都是“管理的”。结果应该很快显示出来。

标签: database performance database-design


【解决方案1】:

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

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

2) noSQL - reddis、mongodb、cassandra

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

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

【讨论】:

    【解决方案2】:

    看看这个,可能会有所帮助 https://github.com/facebook/scribe

    【讨论】:

      【解决方案3】:

      对“Stackoverflow 记录设备数据”的网络搜索产生了数十次点击。

      Here 就是其中之一。提出的问题可能与您的问题不完全相同,但您应该从回答中获得许多有趣的想法。

      【讨论】:

        【解决方案4】:

        我会根据用户最常选择数据子集的方式做出许多决定——通过设备?按日期?通过源IP?您希望将索引保持在最低限度,并且只使用完成工作所需的那些。

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

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

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

        【讨论】:

          猜你喜欢
          • 2011-01-07
          • 1970-01-01
          • 2012-01-08
          • 2011-03-31
          • 1970-01-01
          • 1970-01-01
          • 2018-11-29
          • 2018-05-02
          • 2018-01-16
          相关资源
          最近更新 更多