何时用NoSQL替换RDBMS / ORM

时间:2010-08-19 13:08:23

标签: nosql rdbms

使用NoSQL数据库而不是ORM包装的rdbms会使哪些项目受益?

示例:

  • Stackoverflow类似的网站?
  • 社交社区?
  • 论坛?

2 个答案:

答案 0 :(得分:67)

你的问题非常笼统。 NoSQL描述了一组彼此非常不同的数据库技术。粗略地说,有:

  • 键值商店(Redis,Riak)
  • Triplestores(AllegroGraph)
  • 专栏店(Bigtable,Cassandra)
  • 面向文档的商店(CouchDB,MongoDB)
  • 图表数据库(Neo4j)

项目可以在项目的开发阶段期间使用文档数据库,因为您不必设计复杂的实体关系图或编写复杂的连接查询。我在this answer中详细介绍了文档数据库的其他用法。

如果您的应用程序需要处理大量数据,那么当您使用Cassandra等专门的NoSQL解决方案时,开发阶段可能会更长。但是,当您的应用程序进入生产时,它将从Cassandra的性能和可扩展性中受益匪浅。

一般来说,如果申请具有以下要求:

  • 水平缩放
  • 使用数据模型X
  • 执行Y操作

应用程序将受益于使用NoSQL解决方案,该解决方案旨在存储数据模型X并对数据执行Y操作。如果您需要有关某种类型的NoSQL数据库的更具体的答案,您需要更新您的问题。

  1. 开发过程中的好处(例如,比SQL更容易使用,没有许可成本)?
  2. 在性能方面的好处(例如,有一百万个并发用户的地狱运行)?
  3. 什么类型的NoSQL数据库?

  4. 更新

    在大多数情况下,只能通过密钥查询

    键值存储。它们可用于存储简单数据,例如用户会话,简单配置文件数据或预先计算的值和输出。虽然可以在键值对中存储更复杂的数据,但是它会使应用程序负担维护“手动”索引的责任,以便执行更高级的查询。

    Triplestores 用于存储Resource Description Metadata。除了what Wikipedia tells me之外,我对这些商店一无所知,所以你必须对此进行一些研究。

    列族商店是为存储和处理大量数据而构建的。它们由Google的搜索引擎和Facebook's inbox search使用。 MapReduce functions查询数据。尽管MapReduce函数在开始时可能很难掌握,但概念非常简单。这是一个类比(希望)解释这个概念:

    想象一下,你有多个装满收据的鞋盒,你想要计算你的总开支。你邀请你的一些朋友,并为每个鞋盒分配一个人。每个人都在他的鞋盒里写下每张收据的总数。选择所需数据的过程是Map部分。

    当一个人写下他的(某些)收据的总数时,他可以总结这些总数。这是Reduce部分,可以重复多次,直到处理完所有收据。最后,你所有的朋友聚在一起总结他们的总金额,给你你的总费用。这是最后的Reduce步骤。

    这种方法的优点是你可以拥有任意数量的鞋盒,你可以将任意数量的人分配到鞋盒中,但最终仍然会得到相同的结果。每个鞋盒都可以看作数据库网络中的服务器。每个朋友都可以看作服务器上的线程。使用MapReduce,您可以将数据分布在多个服务器上,让每个服务器处理部分查询,从而优化数据库的性能。

    面向文档的商店this question中有解释,因此我不在此讨论。

    图形数据库用于存储高度连接对象的网络,例如社交网络上的用户。这些数据库针对图形操作进行了优化,例如查找两个节点之间的最短路径,或者从当前节点查找三个跃点内的所有节点。这些操作在RDBMS系统或其他NoSQL数据库上非常昂贵,但在图形数据库上非常便宜。

答案 1 :(得分:0)

NoSQL在不同的设计方法意义上,不仅仅是查询语言。它可以有不同的功能。例如。面向列的数据库用于大量数据仓库,可用于OLAP

与我的question类似,你会发现很多资源。