NoSQL基础入门
NoSQL是什么?
NOSQL是什么?
除了SQL之外的数据库的总称是什么?
这里指的是非SQL的事物。然而,这不是说”SQL的时代已经结束了。”或者”SQL已经不再需要了。”的意思。
这是指使用新的数据库技术不仅限于SQL的运动的总称。
为什么仅仅使用SQL不行?
在SQL中不够充分吗?
「在SQL中是不够充分的。」在开始察觉到的背景中,无疑存在着大数据的存在。关系型数据库(RDB)在单一硬件上使用是最佳选择。但是,将其多台放置,分散管理数据并不擅长。而如果使用非关系型数据库(NoSQL),可以将通用硬件排列起来,就像一个系统一样存储和处理海量数据。
对大数据进行适应是指什么?
对大数据的应对意味着要对应三个V。
-
- Volume(膨大な量)
-
- Velocity(速さ)
- Variety(多種多様)
巨大的数量
当我们说到大数据时,并不是指数据的大小。大数据往往是指个别数据虽然小,但通过大量的聚集而形成的数据的庞大整体。这种大数据的存在近年来由于云计算等技术的普及而不断增加。目前,随着网络速度的提升和连接互联网的设备的增加,大数据的量也因此增加。同时,通过位置信息设备、传感器等设备之间的通信,也导致大数据不断增长。传统上,当数据量增加时,可以通过提升硬件性能来解决(即扩展性)。但如果我们能够将多台通用硬件组合成一台高性能的硬件,这能大幅降低总体成本。
快速度
“适应大数据”指的是需要快速且接近实时地处理庞大的数据块的需求。以Twitter为例,每天会产生12TB的数据。假设我们只使用一台每秒写入速度约为80MB的机器,那么仅仅存储所有数据就需要大约42小时(12TB/80MB)。由于无法花费2天来存储一天的数据,因此必须同时使用多台机器并行处理,才能实现快速处理大量数据的软件技术是必不可少的。
众多多样
大数据的一个特点是数据结构的复杂化。聚集在云端的大数据不仅包括简单的日志数据、文章、照片和视频,还包括位置信息、传感器数据(传感器捕获的信息)、社交图谱和链接等展示数据多样性和相互关系复杂性的数据。此外,突发性的访问增加经常发生在许多网络服务中,导致量和质都剧烈变化。由于大数据不适合结构化的SQL处理,因此需要使用NOSQL来处理。
为什么Web服务选择使用NOSQL。
大规模Web服务的技术人员在许多博客中阐述了使用的原因。
想要强大的处理能力
与关系型数据库相比,NOSQL提供了相当高的处理能力。
我想在设置数据库集群时实现水平扩展。
许多NOSQL可以通过添加节点来进行水平扩展。
我想要使用通用硬件。
NOSQL数据库被设计成可以使用常规硬件轻松创建集群。
希望能够适应复杂且多样化变化的数据结构。
在一个数据库中,支持不容易用关系型数据库(RDB)来表示的数据结构,例如文档导向型和图型。由于没有模式定义,因此不需要事先定义数据的结构,可以灵活地适应各种变化多样的数据结构。
需要具备高可用性和高可靠性。
许多NOSQL通过在多个服务器上复制和分割数据来保证高可用性和可靠性。
NOSQL相较于SQL有不足之处。
功能不够丰富
SQL是一种基于集合论的高级数据库语言,同时关系型数据库管理系统(RDBMS)具备丰富的功能。与此相反,NoSQL主要只有简单的“写入”和“读取”操作,并通常不支持诸如“连接(Join)”等各种运算符。
数据的一致性较低
关系型数据库管理系统(RDBMS)在进行数据更新时具有”排他控制”机制。然而,NOSQL则对此思维进行了放松。
结果整合性很好的想法
在大数据环境中,如果每次有很多人同时访问时都要进行排他控制,那么大量快速处理将变得困难。为了强调速度优先,有一种观点认为“数据一致性并不是在所有应用程序中都必需的”。这意味着可以暂时容忍数据不一致的状态,但最终结果仍然应该是一致的。
巧妙地结合SQL和NOSQL的优点并合理使用是很重要的。
NOSQL数据模型分类
SQL is a programming language commonly used for managing and manipulating relational databases.
键值对类型
(Note: This is the literal translation of “key-value type” in Chinese)
“特征”
最适合进行规模扩大。
在RDB的情况下,如果在更改一个表的列定义时发生了某种读写操作,为了保持与其他表的一致性,就需要使用互斥控制。分散在多个通过网络相互连接的大规模服务器中维护每个数据之间的关系是困难的。
而在键值型的情况下,即使服务器数量增加到数十台或数百台,也可以容易地进行分割。只需了解负责管理键的服务器在哪里即可。
列式数据库
特征
像是扩展了键值类型的数据结构
这是一个具有行和列概念的数据模型。但它不像关系数据库那样使用表,而是可以通过一个称为行键的标识符来存储多个键和值。我们将分组的键值称为列。
文档导向型
特点
可以通过唯一的ID来确定文档。
由于JSON等文档不具有层次结构,并且以扁平化方式进行管理,因此可以通过唯一标识符进行数据访问。新闻网站和博客等可以直接自然地表达文档导向的数据模型,因此在Web应用程序等中被广泛使用。