事务脚本是否也是NoSQL数据库的反模式?

时间:2012-12-17 02:49:33

标签: sql mongodb performance design-patterns nosql

http://martinfowler.com/articles/dblogic.html

使用上述文章的术语,在处理SQL数据库时,编码的事务脚本模式显然是反模式。

NoSQL数据库(如MongoDB)也是如此吗?假设nosql查询将使用的列都是适当的索引。

我问这个问题的原因是:MongoDB中的查询执行返回一个可以迭代的游标。我不知道的是,是否存在与之相关的性能损失。

1 个答案:

答案 0 :(得分:2)

本文将“交易脚本”描述为

  

[a]程序读入它可能需要的所有数据,然后在内存中进行选择和操作,以确定需要哪些[数据库条目]。

每个NoSQL数据库都不同,因此您无法概括“NoSQL”的任何内容。但是在几乎每个数据库系统中,尽可能多地在数据库上进行操作是个好主意。

  1. 只要您使用数据库的查询语法,它至少在理论上可以使用索引来加速某些操作,但只要返回结果集,索引信息就会丢失,从而使这些操作成为可能。更贵。
  2. 当您从数据库中获取大量结果集然后在应用程序层上对其进行过滤时,您必须通过网络传递所有这些数据。根据您的网络基础架构的工作情况,这可能会成为性能瓶颈(假设您的数据库位于不同的物理服务器上 - 通常应该在生产环境中)。传输大型数据集也会影响数据库或数据库驱动程序的任何缓冲系统。
  3. 当您专门询问MongoDB时:MongoDB数据库的设计并不像SQL数据库那样“智能”。该设计假设SQL数据库自己解决的许多问题在应用层上得到解决(约束,级联删除,连接,事务......)。查询语法也没有像40年SQL开发中积累的所有功能那样强大。这意味着您通常不会在应用程序层上进行过滤。但是当使用查询语法解决问题时,通常应该尝试这样做。