一、為什么elasticsearch很適合日志系統
elasticsearch 出名的就是全文檢索,利用分詞和倒排索引能夠很好地解析你想要查詢和文檔的內容,并做匹配,就是達到了日志系統的需求。比如我想要搜尋一個帶有NullPointException的ERROR日志,只需要搜索這兩個詞,它便能快速地進行定位。這個就是和他的倒排索引和分詞的特點做到的。
優點:支持大量、離散、關鍵詞式的查詢,遷移、擴容很簡單,符合日志系統的需求。
換一個分布式數據庫來說,那么首先MySQL單節點百萬或者1千萬的數據量就比較力不從心了,再談到分布式數據庫,它能夠很好的解決單節點的弊端,但是分布式數據需要自定義分庫分表的規則,一段日志的記錄肯定會存在一個字段中,那么MySQL對于like這類的模糊查詢力不從心。
缺點:分布式數據的搭建和分配規則的使用難度都比較高,數據的遷移和持久化更是比較麻煩,對于like類的檢索力不從心,可以說MySQL可以有辦法達到日志系統的需求,但并不適合日志系統的需求。
就目前你所言的404,如果你單獨一個字段去存儲,自然是沒有問題,兩個做都能做,如果混雜在一條的日志里,es從性能上肯定是會更好,但是還是需要考慮好是否適合、難度和未來effort如何?畢竟日志系統只是輔助性的開發,如果不是拿它賣產品,還是要衡量好投入的人力。
延伸閱讀:
二、MongoDB是什么
非關系型數據庫(nosql ),屬于文檔型數據庫。MongoDB采用類JSON的documents來存儲數據。數據結構由鍵值(key=>value)對組成。
MongoDB采用動態數據模型schema,這意味著不需要預先定義表的數據類型和字段名。當MongoDB需要更新文檔documents的時候,可以輕松增加新的字段名或者刪除舊的字段。MongoDB讓數據結構更加層級化,因而存儲數組等復雜數據結構。 在同一個集合collection中,文檔document對字段也沒有強約束,因此更容易設計差異化的數據結構。