SJ.*_*ari 6 java performance logging real-time mongodb
我有一个Java Web应用程序,它接收一些实时事件并将它们推送到用户界面层.我想记录所有感知事件,因为信息量很大,我更喜欢使用NoSQL数据库.
我为此设置了一个mongodb,它为每个事件插入一个文档.问题是这种方法(每个事件的磁盘访问)大大减慢了整个过程.
那么,在这种情况下,我可以采取什么方法?mongodb中有哪些选项(例如批量插入,异步插入,缓存......)?会切换到其他一些NoSQL数据库实现有所作为吗?这里的最佳做法是什么?
我等了一段时间想看到其他答案,但失去了耐心。我已经使用 MongoDB 作为 3 个项目的日志存储(两个用于 Java,一个用于 C#)。基于此,我可以找出以下组织日志记录的重要规则:
不要使用索引。如果您主要是写入,那么索引会导致性能下降。如果您需要后期处理日志分析,请将信息复制到另一个数据库或集合。不幸的是,您无法摆脱主键_id- 只需将其保留原样(GUID)或替换为 auto-increment NumberLong。
降低写入关注度。MongoDB 有丰富的选项来控制写入操作的感知。您可以设置LogLevel和写入规则之间的匹配。例如DEBUG,INFO,WARN可以与WriteConcern.UNACKNOWLEDGED一起使用,并且ERROR,可以与WriteConcern.ACKNOWLEDGEDFATAL一起存储。这样,您可以通过避免在低优先级消息写入期间暂停来提高应用程序性能。同时您确定将重要的消息(很少)放入存储中。
缓存您的集合实例。getDB我的意思是避免在消息到达时或getCollection每次消息到达时都解析 Mongo 的对象。
减少网络传递的数据量。通过最少的字段集限制您的消息。截断太长的堆栈跟踪。看看 Spring 3.x 如何缩短类的全名s.w.s.m.m.a.RequestMappingHandlerMapping而不是some.whatever.sub.main.minimal.agent.RequestMappingHandlerMapping
| 归档时间: |
|
| 查看次数: |
684 次 |
| 最近记录: |