当前位置: 首页 > 科技观察

讨论:MongoDB好,坏,丑

时间:2023-03-22 02:01:24 科技观察

对于刚刚接触MongoDB的人来说,MongoDB是一个NoSQL类型的文档数据库。文档中包含的键值对构成了MongoDB中数据的基本单位。但可以肯定的是,MongoDB确实是当前的NoSQL数据库。它已被广泛接受并适用于各种场合(尽管并非所有项目都使用它)。在这篇文章中,我将结合我这几年使用MongoDB的经验,简单介绍一下MongoDB的优缺点和丑陋之处。好处由于MongoDB已经流行起来,它的好处应该超过坏处和丑陋之处。否则,开发商不会接受。以下是MongoDB的一些优点。灵活的数据模型对于当今的动态用例和不断变化的应用程序,拥有灵活的数据模型是一个福音。灵活的数据模型意味着没有预定义的模式,文档可以保存基于任何键的任何一组值。富有表现力的查询语法MongoDB的查询语句非常具有表现力且易于理解。很多人会说它不像SQL语句。但是,当我们可以继续前进并且查询更简单、更具表现力时,为什么我们仍然坚持使用类似SQL的查询呢?易于学习MongoDB易于学习和快速上手。基本安装,执行不会超过几个小时。更强大的设置可能会很复杂,但我稍后会谈到。根据以上特点,你应该可以很容易地将它揉进你的项目中。性能查询性能是MongoDB的强项。它将大部分可操作数据存储在内存中。所有的数据都固化在硬盘里,但是在查询的过程中,不会从硬盘传数据(就是太慢了)。它直接从本地内存中获取数据,所以速度会更快。因此,为数据设置正确的索引,并提供足够的内存,才能发挥MongoDB的性能优势。可扩展性和可靠性MongoDB在碎片化数据使用方面具有高度可扩展性。水平可伸缩性是大多数NoSQL数据库的一大优势。MongoDB也不例外。它还具有很高的可靠性,因为它的副本集数据是异步复制到更多节点的。异步驱动程序使用异步非阻塞IO是加速所有现代应用程序的关键。MongoDB异步驱动程序支持最新的语言。文档拥有良好的文档可以使开发人员的生活轻松很多,尤其是当开发人员正在处理新技术时。MongoDB有优秀的文档。文本搜索如果您正在构建网站并需要搜索所有数据,那么文本搜索必不可少。例如,使用带有文本搜索的数据库的电子商务站点对用户更有利。服务器端脚本如果您有一些操作需要在服务器端而不是应用程序端执行,在MongoDB中,您可以这样做。将mongo语句放在.js文件中,用mongo命令执行js文件。Document=Object文档数据库的优点是对象可以作为单个文档存储在MongoDB中。这里不需要对象关系映射(ORM)。缺点我们已经看到了MongoDB的各种优点,那么让我们来谈谈缺点。我相信评论家对这部分更感兴趣。如果使用不当,MongoDB会做坏事。今天,很少有应用程序真正需要事务,但有些应用程序需要。不幸的是,MongoDB不支持事务。因此,当您需要在一个请求中修改多个文档或多个集合时,请不要使用MongoDB。由于没有ACID保证,它可能会导致数据损坏。回滚操作必须由您的应用程序处理。没有触发器在关系数据库中,有触发器,在很多情况下都非常有用。但是在MongoDB中没有这样的东西。存储MongoDB需要比其他流行数据库更多的存储空间。MongoDB3.0中引入的WiredTiger解决了这个问题,但是对于大多数应用来说使用WiredTiger并不理想。磁盘清理MongoDB不会自动清理磁盘空间。因此,如果文件被修改或删除,磁盘空间将不会被释放。您必须手动或通过重新启动来释放它。丑有时,丑比坏更糟。在使用技术之前了解技术的局限性很重要。它不会阻止你使用它,但它会让你的生活变得非常艰难。层次结构如果您有一个递归包含子数据对象的数据模型(即,一个对象具有与其自身数据类型相同且具有多个级别的子对象),MongoDB的文档结构会变得非常丑陋。对这些递归嵌入的文档进行索引、搜索和排序将非常困难。Join(连接)在MongoDB中连接两个文档并不容易。MongoDB3.2虽然支持leftouterjoin(查找),但还不成熟。如果您的应用程序需要在一个查询中从多个集合中获取数据,那可能是不可能的。所以你必须进行多次查询,这会让你的代码看起来有点乱。索引虽然MongoDB将速度视为其优势之一,但它依赖于您拥有正确的索引。如果您的索引很差或复合索引的顺序不正确,那么MongoDB可能是最慢的数据库。如果你有很多过滤条件和排序字段,你可能会在一个集合上建立很多索引,当然,这是一种不好的做法。重复数据你可能有很多重复数据,MongoDB不支持关系型。修改这些重复数据可能很困难,而且由于缺乏事务支持,我们还可能破坏数据。结语总结一下,MongoDB是一个优秀的数据库,只要你使用得当,否则会给你带来麻烦。在错误的地方使用它,你会受苦。仔细分析,请教专家。正确使用它,您一定会爱上它。至于坏的和难看的部分,你可以使用设计模式来解决其中的一些问题,在我的文章MongoDB设计模式中有解释。MongoDB的最佳实践以下是MongoDB的一些最佳实践:硬件确保您的数据集适合内存使用压缩每个服务器运行一个MongoDB对于写入大量数据的应用程序使用SSD数据模型一条记录的所有数据都存储在一个文档避免大尺寸文档避免不必要的长字段名删除不必要的索引删除以其他索引为前缀的索引应用程序仅修改更改的字段避免负面查询运行复杂查询explain()(查看执行计划)尽可能使用覆盖查询。需要时使用批量插入。安装并配置至少有一个从库和一个仲裁。当数据非常重要时,每天的数据转储备份参数writeconcern应该设置为2。