大多数NoSQL数据库的基本思想是面向任务的数据库管理系统。俗话说:手里只有锤子,看什么都像钉子。如果你只有一把锤子,那么一切看起来都像钉子。现在我们有不同种类的锤子、起子、凿子、铲子和更多的工具来解决数据管理问题。当然,最好的方法是选择合适的工具来完成不同的工作,如果只使用关系型数据库,实际上可能会适得其反。除了SQL数据库,其他的可以分为四类:键值存储列族存储文档存储图形数据库键值存储可能是最简单的面向任务的NoSQL数据库。它最初的数据模型并不复杂:它主要基于亚马逊在两年一度的ACM操作系统原理研讨会上发布的白皮书,一篇名为Dynamo的论文。这里讨论的数据模型是亚马逊的购物车系统,需要高可用和高负载。因此,键值存储数据库的底层数据模型确实很简单:键和值存储为无模式数据模型。事实上,该系统使用大量商用硬件搭建集群,可扩展性很强,可承载多个高端应用,如亚马逊。Key-value存储产品包括DynamoDB、Riak、ProjectVoldemort、Redis、Aerospike等。列存储是另一种面向任务的数据库解决方案。它的数据模型比键值存储稍微复杂一些,由一个大型、稀疏的表结构组成,其中包含用于存储键的多个列。与Dynamo系统类似,列式存储也是源于特定公司的特殊需求,即谷歌提出的解决方案,发表于2006年OSDI大会(OperatingSystemsDesignandImplementationsymposium,OperatingSystemsDesignand论文中关于BigTable的实施研讨会)。除了谷歌的产品,还有一些有趣的开源实现,比如ApacheCassandra和HBase。在大多数情况下,这些系统可以与Map/Reduce批处理相结合来处理高级查询。文档存储:随着网页和应用程序的爆炸式增长,文档存储可能是最著名和最常用的NoSQL数据库类型。顾名思义,文档存储中的关键概念——文档,是一个半结构化的信息单元,可以是XML、JSON、YAML、OpenOffice、MSOffice或任何其他可用的文档。它的存储和检索简单且无模式。文档存储产品包括流行的MongoDB、ApacheCouchDB、MarkLogic和Virtuoso等。图数据库与其他三个类别有着根本的不同。图数据库要解决的问题与图和图论有关。图数据库,例如Neo4j,旨在为用户提供更好的方式来管理复杂的网络分布式数据。当然,Neo4j并不是唯一基于图模型的解决方案。有的产品成熟度不同,有的是开源或闭源的,比如AllegroGraph、Dex、FlockDB、InfiniteGraph、OrientDB、Sones。
