還是一如既往先把結(jié)構(gòu)圖放出來(lái),上上個(gè)版本添加了redis的緩存,但是不滿足我的需求,因?yàn)楣居许?xiàng)目要求是分布式所以呢,這里我就增加了mongoDb進(jìn)行緩存分布式,好了先看結(jié)構(gòu)圖(1)。
總的來(lái)說(shuō)比較蛋疼,因?yàn)閺膩?lái)沒(méi)有使用過(guò)mongoDB,從安裝,到轉(zhuǎn)為windows服務(wù),設(shè)置權(quán)限等等,好吧這都是題外話。
在寫這個(gè)MongoDB版本的時(shí)候遇到的一些問(wèn)題,我先總結(jié)下:
1.MongoDb版本是官網(wǎng)最新版3.4.4,官方驅(qū)動(dòng)為2.4.3,首先我的項(xiàng)目是以GUID做為主鍵,在往MongonDB中插入時(shí)遇到的是將GUID生成了MongoDB的LUUID格式產(chǎn)生了這樣的格式(2)并且和我的數(shù)據(jù)庫(kù)不同(3)當(dāng)然redis也不同(4)。
a)帶著問(wèn)題我們?nèi)ソ鉀Q查了文檔發(fā)現(xiàn)原來(lái)因?yàn)閎son的鍵要標(biāo)識(shí)成GUID,并且格式要轉(zhuǎn)為string,既然知道問(wèn)題了就去解決找到我的GUID主鍵,如下圖(5):
在主鍵上加上 [BsonId(IdGenerator = typeof(GuidGenerator)), BsonRepresentation(BsonType.String)]這段就可以了,看了下效果確實(shí)可以了(6)。
2.但是在測(cè)試過(guò)程中查詢的時(shí)候卻找不到,一查原來(lái)我的數(shù)據(jù)庫(kù)redis的id值都不一樣,這又是怎么回事?
b)原來(lái)mongoDB生成的GUID和C#生成的GUID的進(jìn)制是不一樣的,為了解決這個(gè)問(wèn)題,Google了一下,找到了一個(gè)腳本,把這個(gè)js腳本放在mongoDB里面執(zhí)行一下,然后生成的GUID就和數(shù)據(jù)庫(kù)的一樣了。如圖(7):
然后生成的_id就和我數(shù)據(jù)redis的一樣了。(8)(9)
解決完成這些問(wèn)題后開(kāi)始寫自己的封裝類。
希望大家多給出建議,博主也是第一次玩mongoDB,如果有好的學(xué)習(xí)資源也請(qǐng)推薦給博主。
第一步創(chuàng)建連接:
View Code
第二步創(chuàng)建DB:
View Code
然后呢獻(xiàn)上自己的封裝helper:
網(wǎng)友評(píng)論