热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB数据库最佳实践

已经有很多关于NoSQL选择的文章了。影响你选择数据库的因素有:读/写操作的吞吐量,持久性,一致性,延迟性等等。NathanHurst的文章“VisualGuidetoNoSQLSystem”很好的总结了这一点。选择合适的NoSQL数据库并不是本文要讨论的内容,但是请你在使用

已经有很多关于 NoSQL 选择的文章了。影响你选择数据库的因素有:读/写操作的吞吐量,持久性,一致性,延迟性等等。Nathan Hurst 的文章“Visual Guide to NoSQL System”  很好的总结了这一点。

选择合适的NoSQL数据库并不是本文要讨论的内容,但是请你在使用NoSQL前做一些调查。没有一个数据库可以适合所有情况。这篇文章假设你选择了MongoDB。
NoSQL 通用的最佳实践

1. 彻底的测试

模拟你的生产环境,包括流量来进行测试。假如你的测试环境不能达到生产环境的压力,你将无法发现性能瓶颈和架构缺陷。

2. RDBMS 并不一定能迁移到 NoSQL

任何在RDBMS上工作的好好的东西并不一定能在MongoDB上工作。所以请你做好心理准备,仔细对比数据库的功能。为了更好的性能,你应该根据 10gen 的建议来设计你的文档和查询。你的应用也许需要重新架构以便于迁移到非关系型数据库。

3. 考虑你的数据的一致性和持久性需求

这一点很重要!MongoDB通过多实例备份来提解决数据持久性问题。我们不推荐你在生产环境中只使用一个MongoDB实例。你必须理解为什么要这么做。

MongoDB 最佳实践

1. 始终启用备份

备份能保证你应用的高可用性。假如你的一个节点down了,第二节点可以迅速启用,你的应用不会中断。

2. 使用最新版本

10gen在不断的发布更新,特别是2.0.x包含了很高的性能提升和并行改进,索引改进和bug修复。如果你还在使用 1.6.3的话,你应该尽快升级。

3. 不要在32位的系统上跑MongoDB

MongoDB在32位系统上有“2.5GB数据限制”。它的存储引擎使用内存映射来读取文件以获得更好的性能。这个功能依赖于内存寻址,而32位系统的内存不能超过4GB。

4. 默认开启日志

MongoDB支持数据库操作的提前日志(write-ahead journaling)。这个功能有助于灾难恢复。

5. 注意你数据文件的位置

你应该保证你的MongoDB的数据文件是存储在物理驱动器上,例如 /data/mongodb。当然你也可以使用虚拟的驱动器,但是必须非常小心。因为它有可能会影响到你的集群架构。我们建议你使用 Amazon EBS 来存放你的数据库文件。

6. 保证足够大的内存

为了保证整个集群的性能,你要确保整个所有MongoDB的工作实例(working set)包括索引可以完全装入内存。如果你发现“page faults”的概率在增加,很有可能mongoDB的数据量超出了你的内存。在这种情况下你有两种选择:加内存,或者创建分片集群(Sharding)。我们建议你先考虑加内存。

7. 保持 65% 以内的压力

如果你发现你的集群压力达到了65%,那么你应该考虑扩大你的集群了。通常,你应该保证数据库压力低于65%。

8. 特别小心分片集群

分片集群需要你充分理解你应用的数据访问方式。你应该充分了解MongoDB的分片工作方式,并且确认你确实需要这个功能。还有,选择一个分片钥匙(sharding key)是对于性能也是很重要的。

配置服务器对于一个集群的健康也是很重要的。在分片集群的环境中,你必须有三台配置服务器。永远不要删除配置服务器的数据,时常备份这些数据。这些配置服务器也需要64位的环境。还有,不要把三台配置服务器放在同一台机器上!

9. 使用 Mongo MMS 来图形化的监控你的数据库

如果你还没有使用 Mongo MMS的话,我强烈推荐这个工具。10gen 正在大力开发这个产品。它提供了一个非常友好的可视化的界面来监控你的MongoDB集群。

10. MongoDB 资源

技术总是在不断进步,你需要市场关注这些信息:
Documentation: http://www.mongodb.org/display/DOCS/Home
Google Group: http://groups.google.com/group/mongodb-user
Bugs: https://jira.mongodb.org
Blog: http://blog.mongodb.org/


推荐阅读
  • MongoDB核心概念详解
    本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
  • 本文介绍了如何使用Workman框架构建一个功能全面的即时通讯系统,该系统不仅支持一对一聊天、群组聊天,还集成了视频会议和实时音视频通话功能,同时提供了红包发送等附加功能。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • MongoDB高可用架构:深入解析Replica Set机制
    MongoDB的高可用架构主要依赖于其Replica Set机制。Replica Set通过多个mongod节点的协同工作,实现了数据的冗余存储和故障自动切换,确保了系统的高可用性和数据的一致性。本文将深入解析Replica Set的工作原理及其在实际应用中的配置和优化方法,帮助读者更好地理解和实施MongoDB的高可用架构。 ... [详细]
  • 本文详细介绍了如何使用 Python 编程语言中的 Scapy 库执行 DNS 欺骗攻击,包括必要的软件安装、攻击流程及代码示例。 ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • Redis:缓存与内存数据库详解
    本文介绍了数据库的基本分类,重点探讨了关系型与非关系型数据库的区别,并详细解析了Redis作为非关系型数据库的特点、工作模式、优点及持久化机制。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • Oracle字符集详解:图表解析与中文乱码解决方案
    本文详细解析了 Oracle 数据库中的字符集机制,通过图表展示了不同字符集之间的转换过程,并针对中文乱码问题提供了有效的解决方案。文章深入探讨了字符集配置、数据迁移和兼容性问题,为数据库管理员和开发人员提供了实用的参考和指导。 ... [详细]
  • 提升 Kubernetes 集群管理效率的七大专业工具
    Kubernetes 在云原生环境中的应用日益广泛,然而集群管理的复杂性也随之增加。为了提高管理效率,本文推荐了七款专业工具,这些工具不仅能够简化日常操作,还能提升系统的稳定性和安全性。从自动化部署到监控和故障排查,这些工具覆盖了集群管理的各个方面,帮助管理员更好地应对挑战。 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • ZOJ 2760 - 最大流问题
    题目链接:How Many Shortest Paths。题目描述:给定一个包含n个节点的有向图,通过一个n*n的矩阵来表示。矩阵中的a[i][j]值为-1表示从节点i到节点j无直接路径;否则,该值表示从i到j的路径长度。输入起点vs和终点vt,计算从vs到vt的所有不共享任何边的最短路径数量。如果起点和终点相同,则输出无穷大。 ... [详细]
author-avatar
手机用户2502854043
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有