2012-12-17 17 views
1

http://martinfowler.com/articles/dblogic.html事务脚本是NoSQL数据库的反模式吗?

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

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

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

+0

你为什么downvote这个问题 - 为什么? – Harry

+1

有许多种NoSQL数据库,其理念完全不同。也许这对他们中的一些人来说是正确的,也许这对其他人来说是错误的。 – Philipp

回答

2

该文章描述了“事务脚本”作为

[A]的过程中,可能需要的所有数据读取,然后做内存的选择和操作,以找出哪些[数据库条目]是需要。

每个NoSQL数据库都是不同的,所以你不能概括任何“NoSQL”。但是在几乎每个数据库系统中,尽可能多地对数据库执行操作是个好主意。

  1. 只要您使用的数据库的查询语法,它至少可以在理论上使用索引来加快某些操作,但只要被返回的结果集,索引信息丢失,这使这些操作更加昂贵。
  2. 当您从数据库中获得一个巨大的结果集并在应用程序层上对其进行过滤时,必须通过网络传递所有数据。根据网络基础架构的工作情况,这可能会成为性能瓶颈(假设您的数据库位于不同的物理服务器上 - 通常应该在生产环境中)。传输巨大的数据集还可以与数据库或数据库驱动程序的任何缓冲系统一起使用。

当您特别询问MongoDB时:MongoDB数据库的设计不像SQL数据库那样“智能”。设计假设SQL数据库自己解决的许多问题在应用程序层上解决(约束,级联删除,连接,事务...)。查询语法还不如40年SQL开发中积累的所有功能。这意味着你通常不会在应用程序层上进行过滤。但是,当查询语法可以解决问题时,通常应该尝试这样做。