一文搞定「關係型資料庫」與「非關係型資料庫」

2020-12-15 AI課工場

背景介紹

話說在網際網路發展的早期,那還是一個各路軍閥混戰,實戰為王的時代,沒有所謂正規軍,搞定問題才是王道。

當然,那個時期也沒有這麼多問題,畢竟那個時期,網際網路還是個新鮮的詞彙,能被稱作是「網民」的人也都是稀有物種,上網多半是大戶人家才玩的起的高端奢侈品。

從技術的角度來看,彼時還處在Web應用發展的初期,網際網路技術架構還是最原始的單體架構,網民數量很少,一個伺服器完全足夠扛起用戶訪問的壓力。

那個時期的關係型資料庫得到了較為廣泛的關注和應用,網站訪問量談不上什麼高並發、更別說什麼用戶體驗了,能玩得起就已經是完勝上億中國人了。

不過現在,中國的網際網路已經發生了天翻地覆的變化,也早已不是當年那個「吳下阿蒙」,在這個不提三高(高並發、高可用、高性能)都不好意思說自己是個程序猿的時代,單純的依靠關係型資料庫已經無法滿足我們的業務需求了,更何況當今在雲計算、大數據、人工智慧盛行的時代,對技術的需求也更加的多元化;現在網絡上每天都會產生龐大的數據,這些數據有很大一部分是由關係型資料庫來處理,其嚴謹成熟的數學理論基礎使得數據建模和應用程式編程更加簡單。

然而,由於數據量級很大而且包含有大量的無規律的數據,而我們如果想要更好的利用這些數據,就要做好對數據的處理和存儲,如果還僅僅依賴關係型資料庫顯然是不太現實的,因此,非關係型資料庫(NoSQL)就應運而生了(好像所有技術都是這麼來的,技術誕生通常是為了要解決企業某些業務需求),先來看看什麼是非關係型資料庫

非關係型資料庫(NoSQL)

所謂非關係型資料庫,其實是相對於關係型資料庫而言的,我們都知道關係型資料庫通常都是處理一些結構化的數據,這些數據通常都是有某些對應關係; 而非關係型資料庫(NoSQL)通常用於存儲那些類型不固定的,也沒有什麼規律的數據。企業每天都產生大量的數據,非關係型資料庫的應用非常廣泛,應用場景也非常多,比如:緩存等,目前比較常用的非關係型資料庫有:

Redis

Memcache

MongoDb

HBase

今天咱們就先來了解其中一個非常優秀、應用也非常多的非關係型資料庫-Redis

非關係型資料庫之Redis

提到Redis可謂是無人不知無人不曉,當然是在程序猿這個可愛的群體中;不管你是從事Python、Java、Go,還是世界上最好的語言PHP開發,Redis都應該是一個比較熟悉的中間件產品。Redis是一個 Key-Value 存儲結構,它支持存儲的 value 類型非常豐富,包含:

string(字符串)

hash(哈希)

list(列表)

set(無序集合)

zset(sorted set:有序集合)

在Java開發過程中Redis的應用場景也非常多,比如:緩存、秒殺、分布式鎖等;接下來咱們就來一睹Redis芳容。

Redis實戰篇

俗話說的好:"光說不練假把式,光練不說傻把式,連說帶練全把式",所以接下來,咱們就連說代練的實操一把

開發環境介紹

首先介紹一下我們的開發環境,這裡是基於Java語言使用IDEA做為開發工具,使用Spring Boot來集成Redis。

Redis的安裝內容,大家可以按照自己的習慣,使用Windows版、Linux版本都可以。

使用Spring Data Redis操作Redis

Java中操作Redis的方案很多,我們使用目前最主流的 Spring Boot Redis,從名稱上我們就可以看出來,這又是Spring對操作Redis的客戶端的封裝,沒錯Spring就是這麼優秀;我們知道在Spring Boot中默認集成的就是 Spring Data Redis,它針對 Redis 提供了非常方便的操作模板類 RedisTemplate ;那麼接下來我們就來看看 Spring Boot 中 Spring Data Redis 的具體用法。

Tips:

在spring中凡是以XxxTemplate命名的類,都是Spring提供的操作xxx的模板類

如:RedisTemplate 就是操作Redis的模板類

創建項目工程

使用Spring Initializr創建Spring Boot 基礎工程,引入 Redis 依賴有兩種方式:

直接在pom文件中加入redis依賴<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2. 在創建項目的時候直接勾選Spring Boot Redis

添加Redis配置信息

在application.properties中添加redis的相關配置信息

實戰操作

接下來咱麼來編寫一個測試類,存儲一個字符串類型的數據,並且取出來驗證是否存儲成功

RedisTemplate模板類提供了對5種數據結構操作的方法,其他的數據類型大家感興趣可以自己去試下,使用方式都是一樣的

redisTemplate.opsForValue() 操作string

redisTemplate.opsForHash() 操作hash

redisTemplate.opsForList() 操作list

redisTemplate.opsForSet() 操作set

redisTemplate.opsForZSet() 操作有序set

我看下測試結果如下:

我們從redis中取出的數據和存儲的數據是一樣的,說明我們在spring中使用Spring Data Redis是成功的,是不是很簡單呢,馬上動手練練吧。

作者:AI課工場,歡迎關注我們,和我們一起關注前沿技術,快速提升。

相關焦點

  • 非關係型資料庫NoSQL的崛起
    CouchDB的創造者達米安·卡茨(騰訊科技配圖)騰訊科技訊(童雲)北京時間12月6日消息,《連線》雜誌網絡版近日刊載文章,對NoSQL(非關係型資料庫其結果是,一支NoSQL(非關係型資料庫)「大軍」就此產生,這種資料庫是專為在數千臺伺服器之間運作而設計的。這些新時代的軟體平臺——包括Cassandra、HBase和Riak等——對資料庫市場進行了改造,不僅有助於Facebook和Twitter等諸多網際網路巨頭的運作,同時也涵蓋了更多的傳統業務。
  • 非關係型資料庫的四個分類你知道嗎?數易軒:圖資料庫入門必讀
    傳統關係型資料庫在當今時代已經不能很好地適應各行業龐大複雜的數據關係,NoSQL非關係型資料庫應運而生,其中圖資料庫更是成為非關係型資料庫的一匹黑馬。數易軒致力於圖資料庫技術服務,在這裡為大家介紹四種NoSQL資料庫的類型。
  • Nosql和傳統的關係型資料庫有什麼差別
    前言平時我們所用到的MSSQL Server、Mysql等是關係型資料庫,它們是建立在關係模型基礎上的資料庫,依靠表、欄位等關係模型,結合集合代數等數學方法來處理數據。而非關係型資料庫,Nosql,Not only sql,是以Key-Value形式進行存儲的,用來解決文檔方面數據的存儲。非關係型資料庫不一定遵循傳統資料庫的一些基本要求,比如說遵循SQL 標準、ACID 屬性、表結構等等。
  • 爬蟲中如何使用關係型資料庫進行查詢
    從關係型資料庫中刪除數據刪除的操作相對來說比較簡單,直接使用DELETE語句即可,只是需要指定要刪除的目標表名和刪除條件,而且仍然需要使用db的commit( )方法才能生效。非關係型資料庫存儲NoSQL,全稱Not Only SQL,意為不僅僅是SQL,泛指非關係型資料庫。NoSQL是基於鍵值對的,而且不需要經過SQL層的解析,數據之間沒有耦合性,性能非常高。
  • 考前複習必備MySQL資料庫(關係型資料庫管理系統)
    大家好,我是魔王哪吒,話不多說,今天帶來的是一篇《考前複習必備MySQL資料庫(關係型資料庫管理系統
  • 大數據處理架構系列一:關係型資料庫RDB
    數據處理技術演進一、什麼是資料庫那麼什麼是關係型數據呢?首先來看標準定義:RDB(Relational Database,RDB)就是基於關係模型的資料庫,也叫關係型資料庫。關係資料庫是由數據表和數據表之間的關係組成的。在關係型資料庫中,表的關聯是一個非常重要的組成部分。
  • 為何經歷數十年的發展,關係型資料庫依然是主流?
    來到70年代,關係模型早已問世。80年代關係資料庫慢慢成為整個社會的信息內容基礎設施建設。兩千年之際,伴隨著網際網路發展,高並發訪問量劇增,做到上百萬至幹萬的等級,而傳統式商業 愈來愈難容下和處理這樣大的數據量和訪問量。從二零零六年剛開始,許多新的非關係資料庫如不斷湧現冒出,在整個 領域颳起了一場前所未有大型的NoSQL改革。
  • 實踐在線 | 基於文檔型非關係型資料庫的檔案數據存儲規範(DA/T82—2019)
    為提高文檔型資料庫中檔案數據的查準率和檢索速度,實現對中文內容的統計分析,應對內容數據和元數據的中文信息進行中文自動分詞,並根據不同的檔案門類編寫相應的中文分詞詞典。"非"等運算符進行檢索,帶運算符檢索 的效果如圖A.1所示;圖A.1 布爾檢索效果圖——二次檢索,是在前面(上次或更前面)檢索結果的基礎上進行檢索; ——數值檢索,是用運算符在指定數值範圍進行檢索;——日期檢索,是用運算符在指定日期範圍進行檢索;——時間檢索,是用運算符在指定時間範圍進行檢索
  • Spring JDBC訪問關係型資料庫
    Spring JDBC訪問關係型資料庫吧。目標使用Spring JDBC訪問關係型資料庫,在Java代碼中執行資料庫增刪改查操作環境準備JDBCpackage main;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet
  • 數易軒:圖資料庫和各類別的資料庫有什麼關係?
    先說說幾個概念:結構化和非結構化數據,關係型和非關係型資料庫簡單而言,可以用二維表來表示的就是結構化數據(如,包含有不同欄位的一條記錄);相反,不方便用二維邏輯表來表現的數據,如文本、圖片、視頻、XML、HTML、圖像和音頻就是非結構化數據。此外,欄位可根據需要擴充,即欄位數目不定的,可稱為半結構化數據。
  • 2019大數據產業峰會|中國信通院馬鵬瑋:《關係型雲資料庫應用...
    大家好,很感謝有這個機會在這裡為大家介紹《關係型雲資料庫應用白皮書》。資料庫裡面什麼類型的資料庫是應用最多的?關係型資料庫。俗話說槍打出頭鳥,關係型資料庫到底怎麼上雲,我們羅列一下,主要是四個問題:1.技術體系問題,認識它,它是什麼的問題。2.選型標準,我到底要挑誰。3.上雲的準備。4.落地路徑。
  • 一文讀懂內存資料庫
    然而,傳統資料庫的管理處理能力,已經不能完全勝任新時期的企業發展,也難以應對新數據時代下的新挑戰。備受業界關注的Key-Value非關係資料庫映入大家眼帘,NoSQL因其高可擴展性、高性能、彈性等優勢,成為新數據時代的「弄潮兒」。
  • 常見的四種非關係型資料庫都適合什麼業務場景?
    大多數NoSQL資料庫的基本理念是面向任務(task-oriented)的資料庫管理系統。如同老生常談:如果你唯一的工具是錘子,那麼一切看起來都像釘子(If all you have is ahammer, everything looks like a nail.)。
  • 從空軍機長到大廠程式設計師,關係資料庫之父傳奇
    為此,科德經過多年的潛心研究提出了一個新的解決方案,該方案最早發表在1970年具有創新性的技術論文——《大型共享資料庫的關係數據模型》及一系列報告中。 科德建議將數據獨立於硬體來存儲,程式設計師使用一個非過程語言來訪問數據。該解決方案的關鍵,是將數據保存在由行和列組成的簡單表中,而不是將數據保存在一個層次結構中。
  • 一文讀懂數據倉庫、數據集市、資料庫的區別與關聯
    本文先從資料庫、數據倉庫和數據集市來區分幾者。 全文3300字,讀完9分鐘! 文 | 穆晨 閱讀本文前,請先回答下面兩個問題: 1. 資料庫和數據倉庫有什麼區別? 2.
  • 白鱔:大型關係資料庫地位難以撼動
    本屆大會將在保留資料庫軟體應用實踐這一傳統主題的基礎上,向大數據、數據結構、數據治理與分析、商業智能等領域進行拓展,以滿足於廣大從業人士和行業用戶的迫切需要。  大型關係型資料庫地位難以撼動  白鱔,原名徐戟,從事應用開發、Oracle資料庫、性能優化工作超過20年。目前創建兩家企業,一直從事IT諮詢服務和系統優化工作。1999年起致力於Oracle資料庫性能優化等方面的研究,參與了大量性能優化項目,積累了大量的實際工作案例。
  • Oracle資料庫還是王者嗎?
    70年代甲骨文公司給美國局方做的一款關係資料庫叫Oralce,Oracle公司和產品的名稱來源於這個項目名稱。2、Oracle的競爭者。關係型資料庫有Mysql、SQLServer、DB2、MongoDB、Redis、ES等等。3、使用Oracle產品的主要行業。
  • 資料庫庫庫庫庫庫庫庫!
    當有人問:資料庫分哪幾類?我們通常的回答是:關係型的和非關係型的。這個答案沒毛病,但是略顯簡單粗暴。如果深究一下,非關係型資料庫還有很多種型。傳統的關係型資料庫,發展了幾十年,遵從ACID原則,強關聯、數據一致性,擅長事務處理。
  • 2013年大數據系統與關係型數據的共存
    SQL受創,即將回擊  我們可以在網站上看到,2012年伊始,對主流關係型資料庫陷入困境的預測就出現了。部分預言已成為現實。SQL關係型資料庫在與未來幾年可能成為其替代品的產品經過一系列鬥爭之後,現在(或者很快)似乎面臨著關於處理整個企業大數據量過濾的最為劇烈的競爭。
  • 為何經過40多年的發展關係型資料庫依然是主流?OceanBase 2.2免費...
    一個常見的問題:很多人會問OceanBase資料庫到底是什麼?首先OceanBase和Oracle / MySQL一樣,它是一款關係型資料庫,但是跟Oracle和MySQL不同的是,它是分布式架構的關係型資料庫。而且它是一款原生的分布式資料庫,不是分庫分表中間件架構的資料庫。 OceanBase資料庫由阿里巴巴和螞蟻金服完全自主研發,不依賴於任何開源項目。