当前位置:  开发笔记 > 后端 > 正文

何时用NoSQL替换RDBMS/ORM

如何解决《何时用NoSQL替换RDBMS/ORM》经验,为你挑选了1个好方法。

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

例子:

Stackoverflow类似的网站?

社交社区?

论坛?

Niels van de.. 68

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

键值商店(Redis,Riak)

Triplestores(AllegroGraph)

专栏店(Bigtable,Cassandra)

面向文档的商店(CouchDB,MongoDB)

图数据库(Neo4j)

在项目的开发阶段,项目可以从文档数据库的使用中受益,因为您不必设计复杂的实体关系图或编写复杂的连接查询.我在这个答案中详细介绍了文档数据库的其他用途.

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

一般来说,如果应用程序具有以下要求:

水平缩放

使用数据模型X.

执行Y操作

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

    开发过程中的好处(例如,比SQL更容易使用,没有许可成本)?

    在性能方面的好处(例如,有一百万个并发用户的地狱运行)?

    什么类型的NoSQL数据库?


更新

在大多数情况下,键值存储只能通过密钥查询.它们可用于存储简单数据,例如用户会话,简单配置文件数据或预先计算的值和输出.虽然可以将更复杂的数据存储在键值对中,但它会使应用程序负担维护"手动"索引的责任,以便执行更高级的查询.

Triplestores用于存储资源描述元数据.除了维基百科告诉我的内容之外,我对这些商店一无所知,所以你必须对此进行一些研究.

列族存储是为存储和处理大量数据而构建的.它们被谷歌的搜索引擎和Facebook的收件箱搜索使用.MapReduce函数查询数据.尽管MapReduce函数在开始时可能很难掌握,但概念非常简单.这是一个类比(希望)解释这个概念:

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

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

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

文档导向的商店在这个问题中有解释,所以我不在这里讨论它们.

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



1> Niels van de..:

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

键值商店(Redis,Riak)

Triplestores(AllegroGraph)

专栏店(Bigtable,Cassandra)

面向文档的商店(CouchDB,MongoDB)

图数据库(Neo4j)

在项目的开发阶段,项目可以从文档数据库的使用中受益,因为您不必设计复杂的实体关系图或编写复杂的连接查询.我在这个答案中详细介绍了文档数据库的其他用途.

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

一般来说,如果应用程序具有以下要求:

水平缩放

使用数据模型X.

执行Y操作

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

    开发过程中的好处(例如,比SQL更容易使用,没有许可成本)?

    在性能方面的好处(例如,有一百万个并发用户的地狱运行)?

    什么类型的NoSQL数据库?


更新

在大多数情况下,键值存储只能通过密钥查询.它们可用于存储简单数据,例如用户会话,简单配置文件数据或预先计算的值和输出.虽然可以将更复杂的数据存储在键值对中,但它会使应用程序负担维护"手动"索引的责任,以便执行更高级的查询.

Triplestores用于存储资源描述元数据.除了维基百科告诉我的内容之外,我对这些商店一无所知,所以你必须对此进行一些研究.

列族存储是为存储和处理大量数据而构建的.它们被谷歌的搜索引擎和Facebook的收件箱搜索使用.MapReduce函数查询数据.尽管MapReduce函数在开始时可能很难掌握,但概念非常简单.这是一个类比(希望)解释这个概念:

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

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

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

文档导向的商店在这个问题中有解释,所以我不在这里讨论它们.

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


+1好答案.当我有更多选票时,我会投票给你.
推荐阅读
jerry613
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有