在使用ORM包装的关系型数据库(RDBMS)之外,哪些项目受益于使用NoSQL数据库?
例如:
- 类似Stackoverflow的网站?
- 社交社区?
- 论坛?
您的问题非常泛泛。NoSQL描述了一系列非常不同的数据库技术。大致上有以下几种类型:
在项目的开发阶段中使用文档数据库可以使您免于设计复杂的实体关系图或编写复杂的联接查询,因此在此阶段中可以从文档数据库中获益。我在这个答案中详细介绍了文档数据库的其他用途。
如果您的应用程序需要处理大量数据,则使用专门的NoSQL解决方案(例如Cassandra)可能会导致开发阶段更长。但是,当您的应用程序进入生产阶段时,Cassandra的性能和可伸缩性将极大地受益。
总的来说,如果一个应用程序具有以下要求:
该应用程序将从使用针对存储数据模型X并在数据上执行Y个操作的NoSQL解决方案中受益。如果您需要更具体有关某种类型的NoSQL数据库的答案,您需要更新您的问题。
键值存储在大多数情况下只能通过键进行查询。它们适用于存储简单的数据,例如用户会话、简单的个人资料或预先计算的值和输出结果。尽管可能可以将更复杂的数据存储在键值对中,但这会使应用程序承担维护“手动”索引以执行更高级查询的责任。
三元存储用于存储资源描述元数据。我对这些存储不了解,除了维基百科告诉我的,所以您需要进行一些研究。
列族存储是为存储和处理大量数据而构建的。它们被谷歌搜索引擎和Facebook收件箱搜索使用。数据通过MapReduce函数进行查询。虽然刚开始理解MapReduce函数可能有些困难,但这个概念相当简单。以下是一个(希望)解释这个概念的比喻:
想象你有多个装满收据的鞋盒,并且你想计算你的总开销。你邀请一些朋友过来,为每个鞋盒分配一个人。每个人在他的鞋盒中写下每张收据的总额。这个选择所需数据的过程是Map部分。
当一个人记录了他的(一些)收据的总数时,他可以对这些总数进行求和。这是Reduce部分,可以重复多次,直到处理完所有收据。最后,你的所有朋友聚在一起,将他们的总和相加,给出你的总开销。这就是最终的Reduce步骤。
这种方法的优点是,您可以拥有任意数量的鞋盒,并且可以将任意数量的人分配给一个鞋盒,最终仍然得到相同的结果。 每个鞋盒都可以看作是数据库网络中的服务器。 每个朋友可以看作是服务器上的一个线程。 使用MapReduce,您可以将数据分布在许多服务器上,并使每个服务器处理查询的一部分,从而优化数据库的性能。
面向文档的存储在此问题中有解释,因此我将不在此处讨论它们。
图数据库用于存储高度连接对象的网络,例如社交网络上的用户。 这些数据库针对图操作进行了优化,例如查找两个节点之间的最短路径或查找当前节点三个跳之内的所有节点。 在关系型数据库系统或其他NoSQL数据库上执行此类操作相当昂贵,但在图数据库上非常便宜。