NoSql的主要类型:键值数据库,列族数据库,文档数据库,图形数据库。
键值数据库:
键可以是一个字符串对象,值可以是任意类型的数据。如整型、字符型、数组、列表、集合等。
相关产品:Redis、Riak、SimpleDB、Chordless、Scalaris、Memcached
数据模型:键/值对,键是一个字符串对象,值是可以任意类型的数据,比如整型、字符型、数组、列表、集合等
典型应用:涉及频繁读写、拥有简单数据模型的应用 内容缓存,比如会话、配置文件、参数、购物车等 存储配置和用户数据信息的移动应用
优点:扩展性好,灵活性好,大量写操作时性能高
缺点:无法存储结构化信息,条件查询效率较低
不适用情形:不是通过键而是通过值来查:键值数据库根本没有通过值查询的途径 需要存储数据之间的关系:在键值数据库中,不能通过两个获两个以上的键来关联数据需要事务的支持:在一些键值数据库中,产生故障时,不可以回滚
使用者:百度云数据库(Redis)、GitHub(Riak)、BestBuy(Riak)、Twitter (Redis和Memcached)、StackOverFlow(Redis)、Instagram (Redis)、Youtube(Memcached)、Wikipedia(Memcached)
列族数据库:
相关产品:BigTable、Hbase、Cassandra、HadoopDB、GreenPlum、PNUTS
数据模型:列族
典型应用:分布式数据存储与管理,数据在地理上分布于多个数据中心的应用程序,可以容忍副本中存在短期不一致情况等的应用程序,拥有动态字段的应用程序,拥有潜在大量数据的应用程序,大到几百TB的数据
优点: 查找速度快,可扩展性强,容易进行分布式扩展,复杂性低
缺点:功能较少,大都不支持强事务一致性
不适用情形:需要ACID事务支持的情形,Cassandra等产品就不适用
使用者: Ebay(Cassandra)、Instagram(Cassandra)、NASA(Cassandra)、 Twitter(Cassandra and HBase)、Facebook(HBase)、Yahoo! (HBase)
文档数据库:
相关产品:MongoDB、CouchDB、Terrastore、ThruDB、RavenDB、SisoDB、 CloudKit、Perservere、Jackrabbit
数据模型:键/值,值(value)是版本化的文档典型应用
典型应用:存储、索引并管理面向文档的数据或者类似的半结构化数据 比如,用于后台具有大量读写操作的网站、使用JSON数据结构的应用、 使用嵌套结构等非规范化数据的应用程序
优点:性能好(高并发),灵活性高,复杂性低,数据结构灵活 提供嵌入式文档功能,将经常查询的数据存储在同一个文档中 既可以根据键来构建索引,也可以根据内容构建索引
缺点:缺乏统一的查询语法
不适用情形:在不同的文档上添加事务。文档数据库并不支持文档间的事务,如果对 这方面有需求则不应该选用这个解决方案
使用者:百度云数据库(MongoDB)、SAP(MongoDB)、Codecademy (MongoDB)、Foursquare(MongoDB)、NBC News(RavenDB)
图形数据库:
相关产品:Neo4J、OrientDB、InfoGrid、Infinite Granph、GraphDB
数据模型:图结构
典型应用:专门用于处理具有高度相互关联关系的数据,比较适合于社交网络、模式识别、依赖分析、推荐系统以及路径寻找等问题
优点:灵活性高,支持复杂的图形算法,可用于构建复杂的关系图谱
缺点:复杂性高,只能支持一定的数据规模
使用者:Adobe(Neo4J)、Cisco(Neo4J)、T-Mobile(Neo4J)