第三部分 數據庫和緩存(46題)

備注:自用回答

1胞枕、列舉常見的關系型數據庫和非關系型都有那些句灌?

答:http://www.cnblogs.com/zylq-blog/p/7595979.html

關系型數據庫:mysql,oracle替劈,sqlserver议泵,sqlite

關系型數據庫最典型的數據結構是表驮配,由二維表及其之間的聯系所組成的一個數據組織

優(yōu)點:

(1)易于維護:都是使用表結構熏纯,格式一致同诫;

(2)使用方便:SQL語言通用粤策,可用于復雜查詢樟澜;

(3)復雜操作:支持SQL,可用于一個表以及多個表之間非常復雜的查詢叮盘。

缺點:

(1)讀寫性能比較差秩贰,尤其是海量數據的高效率讀寫;

(2)固定的表結構柔吼,靈活度稍欠毒费;

(3)高并發(fā)讀寫需求,傳統關系型數據庫來說愈魏,硬盤I/O是一個很大的瓶頸觅玻。

非關系型數據庫:mongoDB,redis

非關系型數據庫嚴格上不是一種數據庫培漏,應該是一種數據結構化存儲方法的集合溪厘,可以是文檔或者鍵值對等。

優(yōu)點:

(1)格式靈活:存儲數據的格式可以是key,value形式牌柄、文檔形式畸悬、圖片形式等等,文檔形式珊佣、圖片形式等等蹋宦,使用靈活披粟,應用場景廣泛,而關系型數據庫則只支持基礎類型冷冗。

(2)速度快:nosql可以使用硬盤或者隨機存儲器作為載體守屉,而關系型數據庫只能使用硬盤;

(3)高擴展性蒿辙;

(4)成本低:nosql數據庫部署簡單胸梆,基本都是開源軟件。

缺點:

(1)不提供sql支持须板,學習和使用成本較高碰镜;

(2)無事務處理;

(3)數據結構相對復雜习瑰,復雜查詢方面稍欠绪颖。

非關系型數據庫的分類和比較:

(1)文檔型,如mongoDB

(2)key-value型甜奄,如redis

(3)列式數據庫

(4)圖形數據庫

2柠横、MySQL常見數據庫引擎及比較?

答:InnoDB:支持事務處理课兄,支持外鍵牍氛,支持崩潰修復能力和并發(fā)控制。如果需要對事務的完整性要求比較高(比如銀行)烟阐,要求實現并發(fā)控制(比如售票)搬俊,那選擇InnoDB有很大的優(yōu)勢。如果需要頻繁的更新蜒茄、刪除操作的數據庫唉擂,也可以選擇InnoDB,因為支持事務的提交(commit)和回滾(rollback)檀葛。?

MyISAM:插入數據快玩祟,空間和內存使用比較低。如果表主要是用于插入新記錄和讀出記錄屿聋,那么選擇MyISAM能實現處理高效率空扎。如果應用的完整性、并發(fā)性要求比較低润讥,也可以使用转锈。

MEMORY:所有的數據都在內存中,數據的處理速度快象对,但是安全性不高黑忱。如果需要很快的讀寫速度,對數據的安全性要求較低,可以選擇MEMOEY甫煞。它對表的大小有要求菇曲,不能建立太大的表。所以抚吠,這類數據庫只使用在相對較小的數據庫表常潮。

注意,同一個數據庫也可以使用多種存儲引擎的表楷力。如果一個表要求比較高的事務處理喊式,可以選擇InnoDB。這個數據庫中可以將查詢要求比較高的表選擇MyISAM存儲萧朝。如果該數據庫需要一個用于查詢的臨時表岔留,可以選擇MEMORY存儲引擎。

3检柬、簡述數據三大范式献联?

答:什么是三大范式:

第一范式:當關系模式R的所有屬性都不能在分解為更基本的數據單位時,稱R是滿足第一范式的何址,簡記為1NF里逆。滿足第一范式是關系模式規(guī)范化的最低要

求,否則用爪,將有很多基本操作在這樣的關系模式中實現不了原押。

第二范式:如果關系模式R滿足第一范式,并且R得所有非主屬性都完全依賴于R的每一個候選關鍵屬性偎血,稱R滿足第二范式诸衔,簡記為2NF。

第三范式:設R是一個滿足第一范式條件的關系模式烁巫,X是R的任意屬性集署隘,如果X非傳遞依賴于R的任意一個候選關鍵字宠能,稱R滿足第三范式亚隙,簡記為3NF.

注:關系實質上是一張二維表,其中每一行是一個元組违崇,每一列是一個屬性

4阿弃、什么是事務斩例?MySQL如何支持事務臭增?

答:原子性、一致性肥印、隔離性伴箩、持久性

在mysql中用的最多的存儲引擎有:innodb入愧,bdb,myisam ,memory 等。其中innodb和bdb支持事務而myisam等不支持事務棺蛛。

5怔蚌、簡述數據庫設計中一對多和多對多的應用場景?

答:一對多關系示例:一個學生只屬于一個班旁赊,但是一個班級有多名學生桦踊。

? ? ? ?多對多關系示例:一個學生可以選擇多門課,一門課也有多名學生终畅。

6籍胯、如何基于數據庫實現商城商品計數器?

答:如果是在非常高的并發(fā)之下离福,還是建議用內存數據庫redis去實現計數的功能杖狼。如果不是那么高的并發(fā),用表實現就可以妖爷。

https://blog.csdn.net/stevendbaguo/article/details/70889449

7本刽、常見SQL(必備)

詳見武沛齊博客:https://www.cnblogs.com/wupeiqi/articles/5729934.html

8、簡述觸發(fā)器赠涮、函數子寓、視圖、存儲過程笋除?

答:https://blog.csdn.net/running_nz/article/details/51111927

9斜友、MySQL索引種類

答:1.普通索引2.唯一索引3.主鍵索引4.組合索引5.全文索引

10、索引在什么情況下遵循最左前綴的規(guī)則垃它?

答:最左前綴原理的一部分鲜屏,索引index1:(a,b,c),只會走a国拇、a,b洛史、a,b,c?三種類型的查詢,其實這里說的有一點問題酱吝,a,c也走也殖,但是只走a字段索引,不會走c字段务热。

索引是有序的忆嗜,index1索引在索引文件中的排列是有序的,首先根據a來排序崎岂,然后才是根據b來排序捆毫,最后是根據c來排序,

11冲甘、主鍵和外鍵的區(qū)別绩卤?

答:主鍵:唯一標識一條記錄途样,不能有重復的,不允許為空

外鍵:表的外鍵是另一表的主鍵,?外鍵可以有重復的,?可以是空值

12濒憋、MySQL常見的函數娘纷?

答:sum,abs跋炕,floor

13赖晶、列舉 創(chuàng)建索引但是無法命中索引的8種情況。

答:https://blog.csdn.net/zengdeqing2012/article/details/38532217

? ? ? ?(1)如果條件中有or辐烂,即使其中有條件帶索引也不會使用(這也是為什么盡量少用or的原因)

  要想使用or遏插,又想讓索引生效,只能將or條件中的每個列都加上索引

 【佬蕖(2)對于多列索引胳嘲,不是使用的第一部分,則不會使用索引

 】鄄荨(3)like查詢以%開頭

 ×伺!(4)如果列類型是字符串,那一定要在條件中將數據使用引號引用起來,否則不使用索引

 〕矫睢(5)如果mysql估計使用全表掃描要比使用索引快,則不使用索引

14鹰祸、如何開啟慢日志查詢?

答:https://www.jb51.net/article/115372.htm

slow_query_log =1

slow_query_log_file=/application/mysql/data/localhost-slow.log

long_query_time = 1

15密浑、數據庫導入導出命令(結構+數據)蛙婴?

答:https://www.cnblogs.com/doudouxiaoye/p/5819607.html

16、數據庫優(yōu)化方案尔破?

答:https://blog.csdn.net/q602075961/article/details/71076390

17街图、char和varchar的區(qū)別?

答:char不可變字段懒构,varchar是可變字段

https://blog.csdn.net/qq_34858648/article/details/77881176

18餐济、簡述MySQL的執(zhí)行計劃?

答:https://blog.csdn.net/heng_yan/article/details/78324176

MySql提供了EXPLAIN語法用來進行查詢分析胆剧,在SQL語句前加一個"EXPLAIN"即可

19絮姆、在對name做了唯一索引前提下,簡述以下區(qū)別:

答:過濾出數據的同時赞赖,進行計數

20滚朵、1000w條數據,使用limit offset 分頁時前域,為什么越往后翻越慢?如何解決韵吨?

答:?先查主鍵匿垄,在分頁。 select * from tb where id in(select id from tb where limit 10 offset 20)

21、什么是索引合并椿疗?

答:索引合并漏峰,讓一條sql可以使用多個索引。對這些索引取交集届榄,并集浅乔,或者先取交集再取并集。從而減少從數據表中取數據的次數铝条,提高查詢效率靖苇。

22、什么是覆蓋索引班缰?

答:如果一個索引包含(或覆蓋)所有需要查詢的字段的值贤壁,稱為‘覆蓋索引’

23、簡述數據庫讀寫分離埠忘?

答:主服務器master記錄數據庫操作日志到Binary log脾拆,從服務器開啟i/o線程將二進制日志記錄的操作同步到relay log(存在從服務器的緩存中),另外sql線程將relay log日志記錄的操作在從服務器執(zhí)行莹妒。?

24名船、簡述數據庫分庫分表?(水平旨怠、垂直)

答:(1)數據庫分表

??? 把一張表按照一定的規(guī)則分解成不同的實體表包帚。比如垂直劃分和水平劃分

? 垂直切分:把不同功能,不同模塊的數據分別放到不同的表中运吓,但是如果同一個模塊的數據量太大就會存在性能瓶頸

水平切分:垂直切分解決不了大表的瓶頸渴邦,如果同一個功能中表的數據量過大,就要對該表進行切分拘哨,為水平切分

通俗理解:垂直切分---分不同的模塊表谋梭;水平切分---分同一個模塊下的多個表

(2)分庫

將一堆數據放到不同的數據庫中保存,上面說的都是在同一個數據庫上倦青,分庫是分到不同的數據庫上

25瓮床、redis和memcached比較?

答:(1)?Redis不僅僅支持簡單的k/v類型的數據产镐,同時還提供list隘庄,set,hash等數據結構的存儲癣亚。

(2)Redis支持數據的備份丑掺,即master-slave模式的數據備份。

(3)Redis支持數據的持久化述雾,可以將內存中的數據保持在磁盤中街州,重啟的時候可以再次加載進行使用兼丰。

26、redis中數據庫默認是多少個db 及作用唆缴?

答:當redis 服務器初始化時鳍征,會預先分配 16 個數據庫(該數量可以通過配置文件配置),所有數據庫保存到結構 redisServer 的一個成員 redisServer.db 數組中面徽。當我們選擇數據庫 select number 時艳丛,程序直接通過 redisServer.db[number] 來切換數據庫。有時候當程序需要知道自己是在哪個數據庫時趟紊,直接讀取 redisDb.id 即可氮双。

27、python操作redis的模塊织阳?

答:https://www.cnblogs.com/xtsec/p/7000404.html

導入redis眶蕉,鏈接redis數據庫,對redis api的使用

28唧躲、如果redis中的某個列表中的數據量非常大造挽,如果實現循環(huán)顯示每一個值?

答:可以嘗試將對象分拆成幾個key-value弄痹, 使用multiGet獲取值饭入,這樣分拆的意義在于分拆單次操作的壓力,將操作壓力平攤到多個redis實例中肛真,降低對單個redis的IO影響谐丢; ? ?

29、redis如何實現主從復制蚓让?以及數據同步機制乾忱?

答:Redis的主從同步機制可以確保redis的master和slave之間的數據同步

全備份過程中,在slave啟動時历极,會向其master發(fā)送一條SYNC消息窄瘟,master收到slave的這條消息之后,將可能啟動后臺進程進行備份趟卸,備份完成之后就將備份的數據發(fā)送給slave

30蹄葱、redis中的sentinel的作用?

答:用于監(jiān)控redis集群中Master狀態(tài)的工具

31锄列、如何實現redis集群图云?

答:Redis集群設計包括2部分:哈希Slot和節(jié)點主從

主從模式的設計:

優(yōu)點:讀寫分離,通過增加Slaver可以提高并發(fā)讀的能力邻邮。

缺點:Master寫能力是瓶頸竣况。

?????????雖然理論上對Slaver沒有限制但是維護Slaver開銷總將會變成瓶頸。

?????????Master的Disk大小也將會成為整個Redis集群存儲容量的瓶頸饶囚。

哈希Slot的優(yōu)缺點:

缺點:每個Node承擔著互相監(jiān)聽帕翻、高并發(fā)數據寫入鸠补、高并發(fā)數據讀出萝风,工作任務繁重

優(yōu)點:將Redis的寫操作分攤到了多個節(jié)點上嘀掸,提高寫的并發(fā)能力,擴容簡單规惰。

32睬塌、redis中默認有多少個哈希槽?

答:16384?個哈希槽

33歇万、簡述redis的有哪幾種持久化策略及比較揩晴?

答:rdb:快照形式是直接把內存中的數據保存到一個dump文件中,定時保存贪磺,保存策略

? ? ? ? aof:把所有的對redis的服務器進行修改的命令都存到一個文件里硫兰,命令的集合

34、列舉redis支持的過期策略寒锚。

答:volatile-lru:只對設置了過期時間的key進行LRU(默認值)?

allkeys-lru?:?刪除lru算法的key ??

volatile-random:隨機刪除即將過期key ??

allkeys-random:隨機刪除???

volatile-ttl?:?刪除即將過期的 ??

noeviction?:?永不過期劫映,返回錯誤??

35、MySQL 里有 2000w 數據刹前,redis 中只存 20w 的數據泳赋,如何保證 redis 中都是熱點數據??

答:redis 內存數據集大小上升到一定大小的時候喇喉,就會施行數據淘汰策略祖今。redis 提供 6種數據淘汰策略:?

volatile-lru:從已設置過期時間的數據集(server.db[i].expires)中挑選最近最少使用的數據淘汰

volatile-ttl:從已設置過期時間的數據集(server.db[i].expires)中挑選將要過期的數據淘汰

volatile-random:從已設置過期時間的數據集(server.db[i].expires)中任意選擇數據淘汰

allkeys-lru:從數據集(server.db[i].dict)中挑選最近最少使用的數據淘汰

allkeys-random:從數據集(server.db[i].dict)中任意選擇數據淘汰

no-enviction(驅逐):禁止驅逐數據

36、寫代碼拣技,基于redis的列表實現 先進先出千诬、后進先出隊列、優(yōu)先級隊列膏斤。

答:請求的優(yōu)先級徐绑。我們先假設一個最簡單的場景,有三個優(yōu)先級:高中低三級掸绞”萌可以設置3個list結構,比如叫queue_h衔掸,queue_m烫幕,queue_l,分別對應三個優(yōu)先級敞映。

37较曼、如何基于redis實現消息隊列?

答:使用lpush向list的左端推送數據(發(fā)送消息)振愿,使用rpop從右端接收數據(消費消息)

38捷犹、如何基于redis實現發(fā)布和訂閱弛饭?以及發(fā)布訂閱和消息隊列的區(qū)別?

答:“發(fā)布/訂閱”模式包含兩種角色萍歉,分別是發(fā)布者和訂閱者侣颂。訂閱者可以訂閱一個或若干個頻道(channel),而發(fā)布者可以向指定的頻道發(fā)送消息枪孩,所有訂閱此頻道的訂閱者都會收到此消息憔晒。

39、什么是codis及作用蔑舞?

答:Codis是一個分布式的Redis解決方案拒担,對于上層的應用來說,連接Codis Proxy和連接原生的Redis Server沒有明顯的區(qū)別攻询,上層應用可以像使用單機的Redis一樣使用从撼,Codis底層會處理請求的轉發(fā),不停機的數據遷移等工作钧栖,所有后邊的一切事情低零,對于前面客戶端來說是透明的,可以簡單的認為后邊連接是一個內存無限大的Redis服務桐经。

業(yè)務需要毁兆,數據可能需要遷移,機器橫向擴容

經過線上測試阴挣,Codis的升級版Reborn在pipline操作的性能比Codis慢了幾十倍

40气堕、什么是twemproxy及作用?

答:twemproxy是 Twtter 開源的一個 Redis 和 Memcache 代理服務器畔咧,主要用于管理 Redis 和 Memcached 集群茎芭,減少與Cache 服務器直接連接的數量。

41誓沸、寫代碼實現redis事務操作梅桩。

答:Redis會將一個事務中的所有命令序列化,然后按順序執(zhí)行

42拜隧、redis中的watch的命令的作用宿百?

答:當某個事務需要按條件執(zhí)行時,就要使用這個命令將給定的鍵設置為受監(jiān)控的

43洪添、基于redis如何實現商城商品數量計數器垦页?

答:https://www.cnblogs.com/JockChou/p/4647973.html

44、簡述redis分布式鎖和redlock的實現機制干奢。

45痊焊、什么是一致性哈希?Python中是否有相應模塊?

46薄啥、如何高效的找到redis中所有以oldboy開頭的key辕羽?

?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市垄惧,隨后出現的幾起案子刁愿,更是在濱河造成了極大的恐慌,老刑警劉巖赘艳,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酌毡,死亡現場離奇詭異克握,居然都是意外死亡蕾管,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門菩暗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來掰曾,“玉大人,你說我怎么就攤上這事停团】跆梗” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵佑稠,是天一觀的道長秒梅。 經常有香客問我,道長舌胶,這世上最難降的妖魔是什么捆蜀? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮幔嫂,結果婚禮上辆它,老公的妹妹穿的比我還像新娘。我一直安慰自己履恩,他們只是感情好锰茉,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著切心,像睡著了一般飒筑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上绽昏,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天协屡,我揣著相機與錄音,去河邊找鬼而涉。 笑死著瓶,一個胖子當著我的面吹牛,可吹牛的內容都是我干的啼县。 我是一名探鬼主播材原,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼沸久,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了余蟹?” 一聲冷哼從身側響起卷胯,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎威酒,沒想到半個月后窑睁,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡葵孤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年担钮,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片尤仍。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡箫津,死狀恐怖,靈堂內的尸體忽然破棺而出宰啦,到底是詐尸還是另有隱情苏遥,我是刑警寧澤,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布赡模,位于F島的核電站田炭,受9級特大地震影響,放射性物質發(fā)生泄漏漓柑。R本人自食惡果不足惜教硫,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望欺缘。 院中可真熱鬧栋豫,春花似錦、人聲如沸谚殊。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嫩絮。三九已至丛肢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間剿干,已是汗流浹背蜂怎。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留置尔,地道東北人杠步。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親幽歼。 傳聞我的和親對象是個殘疾皇子朵锣,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內容