我想将我的node app的日志以一种高效的方式存储在数据库中,以便将来的研究。谁能建议我容易学习的数据库,我可以存储我的日志在它吗?我预计每小时会有一千多个查询。我有点担心使用Mongo,因为它的16mb限制她的文档。
是否有任何易于学习的数据库与驱动节点应用程序?
我宁愿建议您查看类似于弹性堆栈的日志。使用数据库会使日志不透明,除非使用数据库的某些全文搜索功能。简而言之,日志信息是与应用程序数据不同的一类信息,它具有不同的持久性需求、性能需求等。关系或非关系数据存储不是保存日志数据的理想场所。
相反,有像Elastic Search, Solr, InfluxDb等产品,旨在快速存储日志信息,处理它并使其可搜索。这些产品通常有一个UI合作伙伴,允许您在日志数据上进行可视化,这样您就可以开始看到全局。它们还带来了"结构化日志"的概念。它允许你在日志中定义一些语义数据,使它们更有用。
可能有很多结构化的日志记录器可以用于nodejs(如winston),它们集成到弹性搜索中,并为您提供现成的API,允许您对日志数据进行强大的搜索和聚合。您可以通过宿主或docker运行弹性堆栈:
弹性堆栈码头指南
Node js结构化日志与winston到Elastic
你好:)这是你在我的第一个回答中问的问题的答案:
Thanks. But I think they are more "search engine" rather than database...right 🤔 ?
是的,当然,他们更多的是一个搜索和索引解决方案,而不是一个简单的数据库。这是有原因的!
假设您在关系存储(如postgres)中实现日志表。对每个日志进行简单的表插入。现在您的表有了一组模式,如果不读取所有数据并对其进行处理,就很难获得日志。除非您的模式符合日志的信息结构。但如果将来你有一个库想要记录它自己的数据结构到表中。您可以有一个名为"log_data"的字段;也许可以使用一些真正的文本搜索功能……
您可以使用对象存储解决方案,就像您提到的那样,然后您将遇到其他问题。你需要自己解决很多问题。其中之一是原木的陈旧性。日志通常有一个截止日期,它们通常在一段时间后就不再有价值了。当您的系统运行时,它只是添加数据,锁定执行昂贵的写操作,可能会阻塞处理节点上的处理,以实现应该是快速的。此外,如果某些东西被锁定,或者出现问题,你的应用程序可能会崩溃的请求,因为日志....
使用专用日志存储解决了这些问题。首先,他们可以动态地处理结构化日志,所以你可以开始记录新的信息结构,他们可以处理它。您可以有效地查询这些结构,因为它们是日志数据的有效搜索引擎。
它们还具有滚动索引的能力,这意味着它们不会随着越来越多的数据进入而变得越来越慢,因为它们可以按天智能地划分索引,并删除那些太老而不再有用的索引,解决了"我有太多的log";问题。
api的日志也被设计成不会破坏你的应用程序的处理。日志是一个很好的,但不像审计,它不应该让你的应用程序停止运行。日志记录器通常使用一些异步轻量级调度机制来实现这一点,您可以免费获得。
需要做一些工作来设置它们,但是如果你想使用docker和docker compose,那么与使用正确的工具相比,这些工作是最小的:)