【DW12月-推薦系統】Task02 數據庫的基本使用

參考鏈接:https://github.com/datawhalechina/fun-rec

一、Mysql 基礎

1.1 SQL書寫規范

  • 1.以分號“;”結尾;
  • 2.不區分關鍵字大小寫(表名和列名也一樣);
  • 3.表中的數據區分大小寫;
  • 4.常數的書寫方式固定,日期字符串用引號括起來,數字直接書寫。

1.2 數據類型

1.2.1 數值型

數值型包含整型和浮點型:

  • 整型數據:TINYINT、INTEGER、SMALLINT、MEDIUMINT、DECIMAL 、NUMERIC 和BIGINT。
  • 浮點型數據:DECIMAL、FLOAT、REAL 和 DOUBLE PRECISION。

1.2.2 時間型

  • 表示時間值的有日期和時間,具體類型為DATETIME、DATE、TIMESTAMP、TIME和YEAR。

1.2.3 字符串型

  • 常見的字符串類型是指CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。

1.3 數據庫的基本操作

創建:create
選擇:use,alter
插入:insert into
增加:add
刪除:drop,delete
更新:update,modify,change

1.4 常用函數

where:對表進行條件過濾,然后再進行分組處理。
Group by:根據指定的列名,對表進行分組。
Having:為聚合結果指定條件。
Order by:對表的查詢結果根據某指定的字段進行排序。

二、Mongodb 基礎

2.1 MongoDB簡介

MongoDB 是由C++語言編寫的,是一個基于分布式文件存儲的開源數據庫系統。在高負載的情況下,添加更多的節點,可以保證服務器性能。MongoDB 旨在為WEB應用提供可擴展的高性能數據存儲解決方案。
MongoDB 將數據存儲為一個文檔,數據結構由鍵值對(key=>value)組成。MongoDB 文檔類似于 JSON 對象。字段值可以包含其他文檔,數組及文檔數組。

2.2 MongoDB主要特點

  • 1.MongoDB 是一個面向文檔存儲的數據庫,操作起來比較簡單和容易。
  • 2.可以在MongoDB記錄中設置任何屬性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")來實現更快的排序。
  • 3.可以通過本地或者網絡創建數據鏡像,這使得MongoDB有更強的擴展性。
  • 4.如果負載的增加(需要更多的存儲空間和更強的處理能力) ,它可以分布在計算機網絡中的其他節點上這就是所謂的分片。
  • 5.Mongo支持豐富的查詢表達式。查詢指令使用JSON形式的標記,可輕易查詢文檔中內嵌的對象及數組。
  • 6.MongoDb 使用update()命令可以實現替換完成的文檔(數據)或者一些指定的數據字段 。
  • 7.Mongodb中的Map/reduce主要是用來對數據進行批量處理和聚合操作。
  • 8.Map和Reduce。Map函數調用emit(key,value)遍歷集合中所有的記錄,將key與value傳給Reduce函數進行處理。
  • 9.Map函數和Reduce函數是使用Javascript編寫的,并可以通過db.runCommand或mapreduce命令來執行MapReduce操作。
  • 10.GridFS是MongoDB中的一個內置功能,可以用于存放大量小文件。
  • 11.MongoDB允許在服務端執行腳本,可以用Javascript編寫某個函數,直接在服務端執行,也可以把函數的定義存儲在服務端,下次直接調用即可。
  • 12.MongoDB支持各種編程語言:RUBY,PYTHON,JAVA,C++,PHP,C#等多種語言。
  • 13.MongoDB安裝簡單。

2.3 MongoDB 創建數據庫

  • 一個mongodb中可以建立多個數據庫。
    MongoDB的默認數據庫為"db",該數據庫存儲在data目錄中。
    MongoDB的單個實例可以容納多個獨立的數據庫,每一個都有自己的集合和權限,不同的數據庫也放置在不同的文件中。

  • "show dbs" 命令可以顯示所有數據的列表。
    執行 "db" 命令可以顯示當前數據庫對象或集合。
    運行"use"命令,可以連接到一個指定的數據庫。

2.4 MongoDB 創建集合

  • 使用 createCollection() 方法來創建集合。db.createCollection(name, options)
  • 使用 drop() 方法來刪除集合。db.collection.drop()

2.5 MongoDB 文檔操作

文檔的數據結構和 JSON 基本一樣,所有存儲在集合中的數據都是 BSON 格式,BSON 是一種類似 JSON 的二進制形式的存儲格式,是 Binary JSON 的簡稱。

  • 使用 insert()或save()方法向集合中插入文檔。
    save()方法:如果 _id 主鍵存在則更新數據,如果不存在就插入數據。該方法新版本中已廢棄,可以使用 db.collection.insertOne() 或 db.collection.replaceOne() 來代替。
    insert()方法: 若插入的數據主鍵已經存在,則會拋 org.springframework.dao.DuplicateKeyException 異常,提示主鍵重復,不保存當前數據。
  • 使用 update() 和 save() 方法來更新集合中的文檔。
  • 使用 remove() 函數是用來移除集合中的數據。
  • 使用 find() 方法查詢文檔,find() 方法可以傳入多個鍵(key),每個鍵(key)以逗號隔開,即常規 SQL 的 AND 條件。
  • OR 條件語句使用了關鍵字 $or。
  • 使用 sort() 方法對數據進行排序,sort() 方法可以通過參數指定排序的字段,并使用 1 和 -1 來指定排序的方式,其中 1 為升序排列,而 -1 是用于降序排列。
  • 使用 update_one() 方法修改文檔中的記錄。
  • 使用 delete_one() 方法來刪除一個文檔。
  • delete_many() 方法如果傳入的是一個空的查詢對象,則會刪除集合中的所有文檔。

三、Redis 基礎

3.1 Redis簡介

Redis(Remote Dictionary Server ),即遠程字典服務,是一個開源的使用ANSIC語言編寫、支持網絡、可基于內存亦可持久化的日志型、Key-Value數據庫。內存數據庫,讀寫非常高速,可達10w/s的評率,一般應用于數據變化快、實時通訊、緩存等。但內存數據庫通常要考慮機器的內存大小。Redis 是完全開源免費的,遵守 BSD 協議,是一個靈活的高性能 key-value 數據結構存儲,可以用來作為數據庫、緩存和消息隊列。
相比于其他的 key-value 緩存產品有以下三個特點:

  • Redis 支持數據的持久化,可以將內存中的數據保存在磁盤中,重啟的時候可以再次加載到內存使用。
  • Redis 不僅支持簡單的 key-value 類型的數據,同時還提供 list,set,zset,hash 等數據結構的存儲。
  • Redis 支持主從復制,即 master-slave 模式的數據備份。

3.2 Redis 基本操作命令

  • 使用/etc/redis/redis.conf下面的配置文件來啟動Redis。
  • 通過redis-cli,可以連上服務器端的redis服務。
  • 通過 redis-cli 停止Redis,或通過殺掉redis服務進程。
  • 通過select命令進行切換。
  • 使用FLUSHDB刪除當前選擇的數據庫中的所有數據,使用FLUSHALL刪除所有數據庫里面的數據。
  • 使用DBSIZE查看當前選擇的庫中key的數量。

3.3 Key的操作命令

  • 設置過期時間。
    expire 命令設置 key 的過期時間,時間過期后,key 會被自動刪除,設置成功返回1,key不存在返回0。
    ttl 命令以秒為單位返回key的剩余過期時間,如果key不存在返回 -2 key 存在但沒有關聯超時時間則返回 -1 。
  • type命令以字符串的形式返回存儲在 key 中的值的類型,可返回的類型有:string, list, set, zset,hash 和 stream,如果key值不存在返回none。
  • del命令刪除指定的key,不存在的key忽略,返回0,如果key存在,返回刪除的key的個數。
  • set命令將key指定為指定的字符串,如果key存在,則會覆蓋原來的值。
  • get命令返回與鍵 key 相關聯的字符串值。
  • append命令將指定的key追加值。如果key存在,并且是字符串,則會將value追加到key原值的末尾,如果key值是非字符串則會報錯,當key不存在時候,改命令類似于set,簡單將key設定為value。
  • incr 命令將 key 中儲存的數字值增一。如果key不存在,key值會被初始化為0,在進行incr操作。如果字符串類型的值不能表示為數字,則會報錯。
  • decr命令將 key 中儲存的數字值減一,和incr命令相似。
  • Strlen 命令將獲取指定 key 所儲存的字符串值的長度,如果key存儲的不是字符串類型或不存在時,返回錯誤。
  • Setrange命令是將從偏移量 offset 開始, 用 value 參數覆蓋鍵 key 儲存的字符串值。
  • Getrange命令返回存儲在 key 中的字符串的子串,由 start 和 end 偏移決定(都包括在內)。負數偏移提供相對字符串結尾的偏移。并且該命令會通過將結果范圍限制為字符串的實際長度來處理超出范圍的請求。
  • MSET命令設置多個 key 的值為各自對應的 value。如果key存在,則會用新值替換舊值,如果key不存在,會重新創建,該命令總是返回“OK”,因為 MSET不會失敗。
  • MGET命令返回所有(一個或多個)給定 key 的值,值的類型是字符串。 如果給定的 key 里面有某個 key 不存在或者值不是字符串,那么這個 key 返回特殊值 nil 。

四、總結

通過學習mysql,mongodb,redis這三個數據庫可知,每個數據庫有各自的優勢。Mysql是一個非關系型數據庫,擁有較為成熟的體系;MongoDB 并不是單純的內存數據庫,它由 C++ 語言編寫,是一個基于分布式文件存儲的開源數據庫系統;Redis是一個內存數據庫,所有數據都是放在內存中的,持久化是使用 RDB 方式或者 aof 方式。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,936評論 6 535
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,744評論 3 421
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,879評論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,181評論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,935評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,325評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,384評論 3 443
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,534評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,084評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,892評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,067評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,623評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,322評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,735評論 0 27
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,990評論 1 289
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,800評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,084評論 2 375

推薦閱讀更多精彩內容