logging - 我们应该登录同一个数据库还是单独的数据库
问题描述
到目前为止,我正在使用文件系统进行日志记录,现在计划迁移到数据库系统。
我计划为日志使用相同的数据库和不同的集合(NoSQL 术语)/表。使用相同的数据库安全还是更好地为记录器使用不同的数据库?
它是否需要索引,用户可以查询以获取从今天到今天的所有日志,并且将在当前屏幕中仅显示 X 日志,单击下一步按钮它将获取另一个 X 日志。加载用户在一天范围内询问的所有数据并保存在内存中以便下一个和回呼前端可以询问各自的数据是否很好?
如果你们中的任何人已经有记录器的数据库连接,请您提出最佳实践和最失败的情况。
解决方案
我见过不少针对 ElasticSearch 运行的记录器(实际上是整个 ELK 堆栈)。如果您要实施新的解决方案,需要考虑以下事项:
- 记录器必须很快。它可能不会减慢应用程序的速度。如果你自己实现它,循环缓冲区和多线程处理是一个好的开始。
- 会有很多数据。单独的数据库是必须的。通过这种方式,您可以稍后将其移动到具有更便宜存储空间的服务器上,或者根据您的需要或其他方式对其进行扩展。
- 日志数据是基于时间的。设计一个您可能希望每小时/每天进行分区以便于操作的存储。
- 阅读也是如此。您会期望数据按时间排序,最新数据是最需要的。您的索引应该适应这一点。
- 分页和缓存之类的技术取决于数据库供应商。我对MongoDB了解不多,但我想分页应该到位。因此,单击下一步,您应该只从上一个查询中请求一些额外的行。
还有一点:就个人而言,我不会把时间花在实施新事物上。我会安装一个 ELK 实例,配置 Log4J(或任何你的应用程序记录器),并花额外的时间教服务台人员使用新环境。
推荐阅读
- python - Canny 边缘检测后的边界去除
- python - 我正在托盘上用 pip 在 Windows 上安装 pymavlink 2.2.3 版本我该怎么做?
- java - 如何在 Firebase 中获取孩子的价值
- javascript - 在应该产生弹出窗口但不这样做的角度应用程序中寻找错误
- mysql - 如何在mysql中将'from'作为列名?
- sql - 散列主键 postgresql
- java - 在现有行中创建单元格时出现 Java Apache-POI 空指针异常
- c - 寻找更好的字符串搜索算法
- jquery - 动态追加和删除行,使表单提交
- rust - 从 Ref Counted 次的 Vec 克隆到对象的 vec