有一些数据的最佳表现形式是文档(document)。也就是说,不要把这些数据分散到多个表、节点或实体中,将这些信息收集到一个非规范化(也就是文档)的结构中会更有意义。尽管两个或两个以上的文档有可能会彼此产生关联,可是一般来说,文档是独立的实体。可以按照这种方式优化并处理文档的数据库,咱们称之为文档数据库。数据库
例如,假设咱们要编写一个应用程序来获取大学生的成绩单,可能须要根据学生的名字来查询其成绩单,或者根据一些通用的属性来查询成绩单。可是,每一个学生是相互独立的,任意的两个成绩单之间没有必要相互关联。尽管咱们可以使用关系型数据库模式来获取成绩单数据(也许你曾经这样作过),但文档型数据库可能才是更好的方案。网络
文档数据库不是通用的数据库,它们所擅长解决的是一个很小的问题集。
有些数据具备明显的关联关系,文档型数据库并无针对存储这样的数据进行优化。例如,社交网络表现了应用中不一样的用户之间是如何创建关联的,这种状况就不适合放到文档型数据库中。优化
文档型数据库会将数据存储到粗粒度的文档中,而图数据库会将数据存储到多个细粒度的节点中,这些节点之间经过关系创建关联。由于数据的结构是图,因此能够遍历关联关系以查找数据中你所关心的内容,这在其余数据库中是很难甚至没法实现的。文档
例如,社交网络图谱,在社交网络中,公司、员工、技能的信息,这些都是节点,它们之间的关系和朋友之间的关系都是边,在这里面图数据库能够作一些很是复杂的公司之间关系的查询。好比说公司到员工、员工到其余公司,从中找相似的公司、类似的公司,均可以在这个系统内完成。遍历
Redis 是一种特殊类型的数据库,它被称之为 key-value 存储。顾名思义,key-value 存储保存的是键值对。实际上,key-value 存储与哈希 Map 有很大的类似性。能够不太夸张地说,它们就是持久化的哈希 Map。
当你思考这一点的时候,可能会意识到,对于哈希 Map 或者 key-value 存储来讲,其实并无太多的操做。咱们能够将某个 value 存储到特定的 key 上,而且可以根据特定 key,获取 value。差很少也就是这样了。程序