如何决定使用哪种NoSQL技术?

26

2
首先,您需要知道您将拥有哪种类型的数据。 - ase
6个回答

50

MongoDB

可扩展性:高可用性和一致性,但不擅长处理关系和分布式写入。其主要优势在于存储和索引无模式文档。文档大小限制为4mb,并且仅对有限深度的索引有意义。详见http://www.paperplanes.de/2010/2/25/notes_on_mongodb.html

最适用于:有限深度树结构

用例:多样化类型层次结构、生物系统学、图书馆目录

Neo4j

可扩展性:高可用性但不分布式。具有强大的节点空间高速遍历的遍历框架。限于数十亿个节点/关系的图形周围。详见http://highscalability.com/neo4j-graph-database-kicks-buttox

最适用于:深度无限、循环加权连接的图形

用例:社交网络、拓扑分析、语义Web数据、推理

HBase

可扩展性:在PB及以上的可靠一致存储,支持大量具有少量稀疏属性的对象。与Hadoop协作进行大型数据处理任务。http://www.ibm.com/developerworks/opensource/library/os-hbase/index.html

最适用于:有向无环图

用例:日志分析、语义Web数据、机器学习


HBase如何适用于非循环图?它并不像Neo4J一样是一个图数据库。 - Chiron
你会怎么说,Chiron? - b7kich
3
这个答案已经过时。如果想要查看最新的比较,请访问http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis 。感谢Eddie Wong在下面的回答中指出了这一点。 - b7kich

4

4

这实际上是一个很好的资源,可以及时了解新产品。太遗憾了,我不能再次点赞这个答案。 - b7kich

1

MongoDB:

MongoDB是一种文档数据库,不同于关系型数据库。该文档存储半结构化数据,如JSON对象(无模式)。

主要特点:

  1. 架构可以随应用程序的演变而改变
  2. 完全索引
  3. 负载平衡和数据分片
  4. 数据复制
  5. CAP理论中的一致性和分区(一致性-可用性-分区)

何时使用:

  1. 实时分析
  2. 高速日志记录
  3. 半结构化数据管理

何时不使用:

  1. 具有强ACID属性(原子性、一致性、隔离性和持久性)的高事务应用程序。在此用例中,RDBMS是首选。
  2. 操作涉及关系的数据集 - 外键等

HBASE:

HBase是一种开源的、非关系型的、分布式列族数据库。

主要特点:

它提供了一种容错的方式来存储大量的稀疏数据(少量信息被包含在大量空或不重要的数据中,例如在20亿条记录中找到50个最大项,或者在庞大的集合中找到表示不到0.1%的非零项)。支持每行不同的可变模式。可以作为MapReduce作业的输入和输出。每列都可以进行压缩、内存操作和Bloom过滤(一种旨在快速且占用内存较少地告诉您一个元素是否存在于集合中的数据结构)。 何时使用HBase: 1. 如果您按键加载数据、按键(或范围)搜索数据、按键提供数据、按键查询数据;
2. 存储行数据不适合模式(可变模式)。 何时不使用HBase: 1. 用于关系分析;
2. 全表扫描;
3. 聚合数据、按行而不是按列分析的数据。

Neo4j:

Neo4j是一种使用属性图数据模型的图形数据库(数据以图形和具有属性的节点和关系的形式存储)。

主要特点:

  1. 支持完整的ACID(原子性、一致性、隔离性和持久性)规则
  2. 通过使用Apache Lucene支持索引
  3. 无架构,自下而上的数据模型设计
  4. 由于图形可用的紧凑存储和内存缓存,实现了高可扩展性

何时使用:

  1. 主数据管理
  2. 网络和IT运营
  3. 实时推荐
  4. 欺诈检测
  5. 社交网络(如Facebook)

何时不使用:

  1. 大批量查询/扫描
  2. 如果您的应用程序需要对数据进行分区和分片

在这篇文章中查看各种NoSQL技术的比较。

来源:

维基百科,Slide share, Cloudera,Tutorials Point,Neo4j


0

你也可以考虑评估多模型DBMS,作为NoSQL产品的第二代。使用多模型,您不必在选择一个模型时做出所有妥协,而是可以选择多个模型。

第一个多模型NoSQL是OrientDB


-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接