NoSQL 是什么?请说明 NoSQL 资料库的特点
2023年2月9日
NoSQL 简介
最初表示Non-SQL 后来转解为Not Only SQL,是对不同于传统资料库的统称,其未支援传统资料库 ACID 的特性,而是遵守 BASE 模型特性,只能保持最终一致性。但 NoSQL 本身的优势为:
- 灵活性:相比于 SQL 需要事先定义栏位与资料型别,NoSQL 则可以很自由的储存资料。
- 扩展性:NoSQL 利于横向扩展,支援更多流量,因此也提升可用性与高效性。
NoSQL 四大类型
Key-Value Store
资料结构为 <Key, Value>
的方式存取,Key 为一个字串,Value 则可以是任意型别(整数、字元、数组、集合等)。
相关产品为 Redis、Memcached 等,最常应用在频繁读写、简单资料模型的应用,内容适合暂时存放的资料,其优点为扩展性好、灵活性好、大量写操作时效能高;缺点则为无法储存结构化资料、条件查询效率低。
Wide Column Store
传统关连式资料库 RDBMS 在新增新的栏位时,需要动到整张表,如果在未下 Index 的状况下搜寻,也需要扫过整张表,而为了解决这个问题, Wide Column Store 则可以单独新增修改 Column 到每一个 Row 中,如下图所示。
相关产品为 Big Table、HBase、Cassandra,应用的情境为:需要分散式资料储存与管理、拥有大量资料的应用程式(TB 量级)。他的优点在于能够有效的管理分散式储存、寻找速度快、扩展性强;缺点为不支援强交易一制性。
Document Store
Document Store 的核心概念是「Document」这个概念,他使用的编码包括XML
、 YAML
、 JSON
、 BSON
等,而其内容没有标准的模式,也不要求有同样章节等,对应到资料库的概念就是不需要有相同的栏位,以及不需定义其资料型别。
- 范例一:JSON 编码
{ "FirstName": "Bob", "Address": "5 Oak St.", "Hobby": "sailing" }
- 范例二:XML 编码
<contact> <firstname>Bob</firstname> <lastname>Smith</lastname> <phone type="Cell">(123) 555-0178</phone> <phone type="Work">(890) 555-0133</phone> <address> <type>Home</type> <street1>123 Back St.</street1> <city>Boys</city> <state>AR</state> <zip>32225</zip> <country>US</country> </address> </contact>
相关产品为 MongoDB、RavenDB 等,适合应用在具有大量读写操作的网站、使用 JSON 资料结构的应用。其优点为性能好、灵活性高、复杂度低、资料结构灵活。
Graph Store
资料结构 Graph 的延伸应用,纪录每个节点与线之间的关系,专门处理高度相互关联的关系资料,适合用于社交网路,也适合推荐系统、路经寻找等问题上。优点在于灵活性高、支援复杂的图形演算法,但也因为其复杂性较高,因此能支援的资料规模有限。相关的产品为 Neo4J、GraphDB 等。