還是一如既往先把結(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)建連接:

Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(fā)培訓(xùn),云培訓(xùn)培訓(xùn) View Code

第二步創(chuàng)建DB:

Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(fā)培訓(xùn),云培訓(xùn)培訓(xùn) View Code

然后呢獻(xiàn)上自己的封裝helper:

Android培訓(xùn),安卓培訓(xùn),手機(jī)開(kāi)發(fā)培訓(xùn),移動(dòng)開(kāi)發(fā)培訓(xùn),云培訓(xùn)培訓(xùn) 

網(wǎng)友評(píng)論