第10章  NoSQL数据库

在第5章“关系数据库”中,我们检查了关系数据库以及相关处理的SQL查询语言。请牢记,关系数据库中的数据存储在表中,它们是结构化数据。

在许多现代软件环境下,数据过于流体化、动态化和大型化,无法设计成严格的关系数据库,也得不到相应的便利。在这些情况下,首选是非关系数据库。因为SQL查询语言没有运用于这样的存储安排,这些非关系数据库就叫作NoSQL数据库。在成功的网络公司中,它们特别流行,比如Facebook、 Amazon和Google。要理解数据在这些环境中是如何管理和分析的,就需要理解NoSQL数据库本身的工作原理。

NoSQL数据库的基础数据结构和关系数据库的基础数据结构完全相同,即映射数据结构(也叫作字典或者联合数组),在Java中是通过java.util.Map<K,V>接口以及19个实现这个接口的类来实现的。其中有HashMap<K,V>类,它实现了经典的哈希表数据结构。类型参数KV代表键和值。

正如第9章“推荐系统”的描述,映射数据结构的本质特征是它的泛函式键—值机制。就像一个数学函数y=f(x),键—值机制是一个输入输出过程。在数学的语境下,x是输入而y是输出。在数据结构的语境下,键是输入而值是输出。

注意,借助于一个数学函数,每个x值对应一个唯一的y值,不可能同时有f(7) = 12和 f(7) = 16。换句话说,输出值必须唯一。以这种方式,每一个x值可被视为y值的一个(唯一的)标识符,非常像学生ID和学生的对应。

图书的索引是这种机制的一个好例子。键是关键词,在索引中按照字母表排序,并且每个键的值是关键词能够找到的页数列表。注意每个词在索引中只出现一次。

在关系数据库中,一个或多个属性(列)被指定为表的键。在最简单的例子中,一个属性是键。在这种情况下: ...

Get Java数据分析指南 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.