操作的最佳实践

简介: 操作的最佳实践

作为一个在web时代开发的数据库,MongoDB在开发时就已经具备了这个时代开发人员的观念,因此不需要像传统关系型数据库管理系统那样多的操作开销。话虽如此,但它扔需要遵循一些最佳实践才能先行一步并实现高可用性的目标。


以下顺序按重要性排序


默认情况下启用Journaling日志功能

Journaling日志 功能使用 预写日志以便在MongoDB服务器突然关闭的情况下进行恢复。

使用MMAPv1存储引擎时,应始终启用Journaling日志功能。

使用WiredTiger存储引擎,Journaling日志和检查点功能应在一起使用以确保数据持久性。


结论:无论如何,使用Journaling日志和微调日志的大小和检查点的频率是一种很好的做法,这样可以避免数据丢失的风险。


在MMAPv1中,默认情况下,Journaling日志每100毫秒冲刷(Flush)一次磁盘。如果MongoDB在确认写入操作之前正在等待Journaling日志,则Journaling日志将每隔30毫秒冲刷一次磁盘。


工作集应该容纳在内存中

特别是在使用MMAPv1存储引擎时, 工作集(Working Set) 最好 小于 底层机器或虚拟机的内存。MMAPv1使用来自 底层操作系统的内存映射文件 ,如果在RAM和磁盘之间没有太多交换,这可以大大受益。另一方面,WiredTiger在使用内存方面效率更高,因此它也可以从同样的原则中受益匪浅。工作集最大为db.stats()报告的数据大小加索引大小。


记住数据文件位置

可以使用 --dbpath 命令行选项将数据文件安装在任何位置。确保数据文件存储在具备足够磁盘空间的分区中非常重要。最好是 XFS 或至少是 Ext4 格式。文件格式笔记


随时更新版本

偶数主编号版本是稳定版本 。例如:4.2是稳定的而4.3是不稳定的。始终更新到最新的安全更新版本并考虑在下一稳定版本发布后立即更新是一个很好的做法。


使用Mongo MMS以图形化方式监控服务

MongoDB Inc. 的免费监控服务是一个很好的工具,使用它可以了解MongoDB集群、通知和警报的简况,并积极主动地解决潜在问题。


如果开发人员的指标显示有严重使用的状况,可以考虑进行扩展。

实际上,MongoDB并不会出现真正大量使用的情况。 如果 CPU、RAM等关键指标的使用率>65% ,或者 发现出现磁盘交换的情况 ,就是应该开始考虑扩展的警报了。开发人员可以通过使用更大的计算机进行垂直扩展,也可以通过分片进行水平扩展。


分片时要小心

分片就像是对分片建(Shard Key)的强烈承诺 。如果开发人员做出了错误的决定,那么 返回可能会非常困难。 在设计分片时,架构师需要长时间深入考 虑读取和写入中 的当期工作负载,以及 预期的数据访问模式


使用MongoDB团队维护的应用程序驱动程序

支持这些驱动程序,并且通常比同等程序更快地更新。如果MongoDB不支持开发人员当前正在使用的语言,则需要使用MongoDB的 JIRA跟踪系统


安排定期备份

无论使用的是独立服务器、副本集还是分片,都应将常规备份策略用作防止数据丢失的二级防护。 XFS 是一个很好的文件系统选择,因为它可以执行 快照(Snapshot)备份


应避免手动备份

应尽可能的使用定期自动备份。如果需要使用手动备份,则 可以使用副本集中的隐藏成员来进行备份。开发人员必须确保在此成员中使用 db.fsyncwithlock 以在此节点上获取最大一致性,同时启用Journaling日志功能。


启用数据库访问控制

永远不要将数据库放在没有访问控制的生产系统中。访问控制应该在节点级别由适当的防火墙实现,该防火墙仅允许通过使用内置角色或自定义的角色来访问特定的应用程序服务器到数据库以及数据库级别。必须在启动时使用 --auth 命令行参数初始化并使用 admin 集合进行配置。


使用真实数据测试部署

MongoDB是一个 无模式的面向文档的 数据库,这意味着可能拥有包含不同字段的文档。在这种情况下,应使用尽可能接近生产数据的数据进行测试,这比使用关系数据库管理系统更为重要。对于包含意外值的额外字段的文档来说,它可以产生使应用程序平稳运行或在运行时崩溃的差别。因此,开发人员应尝试使用生产级别数据部署 阶段测试(Staging)服务器 ,或者至少使用适当的库(例如Faker)伪装生产数据。

目录
相关文章
|
消息中间件 存储 大数据
一文读懂kafka的幂等生产者
一文读懂kafka的幂等生产者
|
存储 NoSQL 关系型数据库
一.MongoDB入门-MongDB介绍和安装
MongoDB入门-MongDB介绍和安装
|
1月前
|
缓存 监控 Java
【分布式】分布式核心组件——分布式熔断降级:熔断器状态机、熔断策略、降级方案、Resilience4j/Sentinel实现
本文系统化梳理分布式熔断降级完整知识体系,涵盖核心定位、状态机模型、熔断策略(慢调用/异常比例/数)、降级方案、Resilience4j与Sentinel深度对比、生产落地实践及云原生进阶扩展,助力学习、开发与面试一站式掌握。
|
存储 监控 NoSQL
Redis脑裂:预防与解决之道
在分布式系统中,Redis集群的脑裂问题是一个令人头疼的难题。它指的是由于网络分区或其他原因,导致集群中的节点无法正常通信,从而形成多个子集群,每个子集群都认为自己是主集群,进而引发数据不一致和服务可用性下降的问题。那么,如何有效预防Redis脑裂问题?当问题发生时,我们能否迅速解决?本文将围绕这一主题,分享一些实用的技术干货。
677 2
|
NoSQL 分布式数据库 MongoDB
【MongoDB 专栏】MongoDB 的分布式事务解决方案
【5月更文挑战第11天】本文探讨了MongoDB的分布式事务处理,涉及两阶段提交(2PC)、TCC补偿事务、分布式锁和幂等处理。2PC通过协调者与参与者确保数据一致性,而TCC提供更高性能和容错性。分布式锁解决并发冲突,幂等处理保证事务正确性。根据业务需求选择合适方案,并关注性能、可靠性和容错。
951 2
【MongoDB 专栏】MongoDB 的分布式事务解决方案
|
SQL Java 数据库连接
jpa、hibernate、spring-data-jpa、jdbcTemplate
jpa、hibernate、spring-data-jpa、jdbcTemplate
338 1
|
缓存 算法 Java
Go语言性能调优:核心策略与技巧
【2月更文挑战第18天】本文详细探讨了Go语言性能调优的核心策略和技巧。我们将从代码层面、内存管理、并发控制等多个维度出发,介绍如何通过优化代码结构、减少内存分配、提高并发效率等手段来提升Go程序的性能。通过本文的学习,将能够掌握一套实用的Go语言性能调优方法,为提升程序性能提供有力支持。
|
消息中间件 Oracle 关系型数据库
实时计算 Flink版产品使用合集之如果想自定义connector和pipeline要如何入手
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
消息中间件 Kubernetes Java
实时计算 Flink版操作报错合集之写入 Kafka 报错 "Failed to send data to Kafka: Failed to allocate memory within the configured max blocking time 60000 ms",该怎么解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
1329 0