我想以一種有效的方式將我的節點應用程式的日志存盤在資料庫中以備將來學習。任何人都可以建議我易于學習的資料庫,我可以在其中存盤我的日志嗎?我預計每小時有超過一千次查詢。我有點擔心使用 Mongo 因為它的 ber doc 限制為 16mb。
是否有任何易于學習的帶有節點應用程式驅動程式的資料庫?
uj5u.com熱心網友回復:
我寧愿建議您查看日志的彈性堆疊之類的東西。使用資料庫會使您的日志不透明,除非您使用資料庫的某些全文搜索功能。簡而言之,日志資訊是與應用程式資料不同的一類資訊,它具有不同的持久性要求、性能要求等。關系或非關系資料存盤不是保存日志資料的理想場所。
取而代之的是 Elastic Search、Solr、InfluxDb 等產品,旨在快速存盤日志資訊、處理它并使其可搜索。這些產品通常有一個 UI 合作伙伴,可讓您在日志資料之上進行可視化,因此您可以開始了解全域。他們還提出了“結構化日志”的概念,允許您在日志中定義一些語意資料,使它們更加有用。
可能有很多結構化記錄器可用于 nodejs(例如 winston),它們集成到彈性搜索并為您提供現成的 API,允許您對日志資料進行強大的搜索和聚合。您可以托管或通過 docker 運行彈性堆疊:
彈性堆疊泊塢窗指南
使用 winston 到 Elastic 的 Node js 結構化日志記錄
uj5u.com熱心網友回復:
你好 :) 這是對你在我的第一個回答中提出的問題的回答:
Thanks. But I think they are more "search engine" rather than database...right ?? ?
是的,它們更像是一個搜索和索引解決方案,而不是一個簡單的資料庫。這有一個很好的理由!
想象一下,你在像 postgres 這樣的關系存盤中實作了你的日志表。對于每個日志,您都有一個簡單的插入表。現在你的表有一個固定的模式,這使得在不讀取所有資料并處理它的情況下很難獲取你的日志。除非您的架構適合您日志的資訊結構。但是,如果將來您有一個庫想要將其自己的資料結構記錄到表中,該怎么辦。你可以有一個名為“log_data”的欄位,也許可以使用一些真正的文本搜索功能......它并不理想。
您可以采用物件存盤解決方案,就像您提到的那樣,然后您會遇到其他問題。您需要自己解決很多問題。其中之一是日志陳舊。日志通常有一個到期日期,它們通常在一段時間過去后不再有價值。當您的系統運行時,它只是添加資料、鎖定以執行昂貴的寫入,可能會阻塞處理節點上的處理,以便進行快速處理。此外,如果某些內容被鎖定或出現問題,您的應用程式可能會由于日志記錄而導致請求崩潰....
使用專用日志存盤可以解決這些問題。首先,它們可以動態處理結構化日志,因此您可以開始向它們記錄新的資訊結構,它們可以處理它。您可以有效地查詢這些結構,因為它們實際上是該日志資料的搜索引擎。
它們還具有滾動索引的能力,這意味著它們不會隨著越來越多的資料進入而變得越來越慢,因為它們可以按天智能地對索引進行磁區并擺脫那些太舊而不再有用的索引,解決了“我有太多日志”問題。
要記錄的 api 還旨在不干擾您的應用程式的處理。日志記錄很好,但與審計不同的是,如果它停止運行,它不應關閉您的應用程式。記錄器通常使用一些異步輕量級調度機制來實作這一點,您可以免費獲得。
設定它們需要做一些作業,但是如果您想使用 docker 和 docker compose,與使用正確的作業工具所獲得的好處相比,這項作業是微不足道的 :)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/324413.html
