【问题标题】:Database to manage million log files管理百万日志文件的数据库
【发布时间】:2017-06-23 10:28:12
【问题描述】:

我希望在系统上拥有大量(例如百万)的日志文件。但是操作系统对打开的文件有限制。在单个文件夹中创建数百万个文件效率不高。

是否有现成的解决方案、框架或数据库可以高效地创建日志文件并将数据附加到日志文件?

我可以想象各种技术来优化大量日志文件的管理,但可能有一些开箱即用的方法。

例如我希望每天或当它达到 50MB 时重新创建该日志文件。必须存储旧的日志文件。例如上传到 Amazon S3。

我可以想象log database 将所有日志写入单个文件,但稍后处理它会将记录附加到数百万个文件中。

可能有适合此类任务的特殊文件系统。我什么也找不到。我相信可能会有解决方案。

PS 我希望在单个服务器上运行日志记录。我说 100 万是因为它超过了打开文件的默认限制。 100 万个文件 1MB 等于 1TB,可以存储在普通硬盘上。

在编写自己的解决方案之前,我会寻找现有的解决方案。我确信可能有一组日志服务器。我只是不知道如何搜索它们。

【问题讨论】:

  • 为什么不直接使用像 log4J 这样的标准日志框架并创建一个简单的计划任务,该任务将每天移动一次日志文件,或者当文件大于 ... KB 时?
  • 例如我有 100 万用户,今天将有 10.000 人登录。我希望每个用户有 1 个日志文件。如果有管理许多日志文件的解决方案,我不希望重新发明轮子。可能有打开文件的缓存,每 X 秒刷新打开文件的例程。
  • 老实说,我认为为每个用户创建一个日志文件似乎是设计非常糟糕的结果——你真的应该考虑另一种方法 imo

标签: database logging frameworks


【解决方案1】:

我会开始将 Hadoop 的 Cassandra 视为日志数据的存储,最终如果您希望这些数据以文件的形式出现,请编写一个过程,该过程将在其中一个数据库上进行选择并将它们放置在格式化文件中.

【讨论】:

  • 常规数据库的问题是它们被设计为索引数据。在常规数据库中写入日志效率不高。
  • Cassandra 是为集群设计的。我正在寻找在具有单个驱动器的单个系统上运行的解决方案。
  • 从我看到的情况来看,如果您设置了一个单节点 HDFS 服务器,那么您的配置参数 dfs.namenode.fs-limits.max-directory-items 为 0,并且对文件数量没有限制单个目录。 (仅受内存限制)。然后在你的应用程序中使用它。
  • 问题是您是否真的需要同时打开 10k 个或更多文件?我在 linux 上看到每个进程的默认限制是 64k,使用 ulimit -n 命令获取此信息。
  • 关于如何更改 linux 服务器的每个进程打开文件限制的一些有趣信息在这里:stackoverflow.com/questions/3734932/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-10
  • 1970-01-01
  • 2015-05-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
相关资源
最近更新 更多