NoSQL 是什么?请说明 NoSQL 资料库的特点

2023年2月9日

💎 加入 E+ 成長計畫 與超過 350+ 位軟體工程師一同在社群中成長,並且獲得更多的軟體工程學習資源

NoSQL 简介

最初表示Non-SQL 后来转解为Not Only SQL,是对不同于传统资料库的统称,其未支援传统资料库 ACID 的特性,而是遵守 BASE 模型特性,只能保持最终一致性。但 NoSQL 本身的优势为:

  • 灵活性:相比于 SQL 需要事先定义栏位与资料型别,NoSQL 则可以很自由的储存资料。
  • 扩展性:NoSQL 利于横向扩展,支援更多流量,因此也提升可用性与高效性。

NoSQL 四大类型

Key-Value Store

资料结构为 <Key, Value> 的方式存取,Key 为一个字串,Value 则可以是任意型别(整数、字元、数组、集合等)。

NoSQL Key-value store
NoSQL Key-value store

相关产品为 Redis、Memcached 等,最常应用在频繁读写、简单资料模型的应用,内容适合暂时存放的资料,其优点为扩展性好、灵活性好、大量写操作时效能高;缺点则为无法储存结构化资料、条件查询效率低

Wide Column Store

传统关连式资料库 RDBMS 在新增新的栏位时,需要动到整张表,如果在未下 Index 的状况下搜寻,也需要扫过整张表,而为了解决这个问题, Wide Column Store 则可以单独新增修改 Column 到每一个 Row 中,如下图所示。

NoSQL Wide Column store
NoSQL Wide Column store

相关产品为 Big Table、HBase、Cassandra,应用的情境为:需要分散式资料储存与管理、拥有大量资料的应用程式(TB 量级)。他的优点在于能够有效的管理分散式储存、寻找速度快、扩展性强;缺点为不支援强交易一制性

Document Store

Document Store 的核心概念是「Document」这个概念,他使用的编码包括XMLYAMLJSONBSON 等,而其内容没有标准的模式,也不要求有同样章节等,对应到资料库的概念就是不需要有相同的栏位,以及不需定义其资料型别。

  • 范例一: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>
    
NoSQL Document Store
NoSQL Document Store

相关产品为 MongoDB、RavenDB 等,适合应用在具有大量读写操作的网站、使用 JSON 资料结构的应用。其优点为性能好、灵活性高、复杂度低、资料结构灵活

Graph Store

资料结构 Graph 的延伸应用,纪录每个节点与线之间的关系,专门处理高度相互关联的关系资料,适合用于社交网路,也适合推荐系统、路经寻找等问题上。优点在于灵活性高、支援复杂的图形演算法,但也因为其复杂性较高,因此能支援的资料规模有限。相关的产品为 Neo4J、GraphDB 等。

NoSQL Graph Store
NoSQL Graph Store
🧵 如果你想收到最即時的內容更新,可以在 FacebookInstagram 上追蹤我們