日前從公司離職,很快,還沒休息就步入了現在的公司,開始跟著公司的腳步走。
公司的專案基本都是大資料的,所以在資料庫上大部分都是使用mongodb和redis,基本都是nosql型的資料庫為主。以前自己學著做過mongodb和redis的demo,大體知道其怎麼去運用,只是沒有乙個規範化的封裝和運用,單純是學習。現在有實戰專案了,就激起了我前進學習的心,趁著今天自己查了下一些資料,學習了借鑑了一些前輩的方法後自己也封裝了乙個mongdb的底層通用類,這裡分享出來跟大家一起學習下。
目前mongodb提供的驅動主要有兩種:
兩個驅動的運用自己都有使用過,個人感覺官方的驅動提供的方法比較多,用起來也比較順手,而且更新度比samus的高,所以自己使用的是官方的驅動。
官網驅動的簡單使用
主要使用下面的兩個dll
mongodb.dll 驅動的主要程式
mongodb.gridfs.dll 用於儲存大檔案。
基本的增刪改查**如下:
封裝擴充套件使用
1.資料庫配置檔案
考慮到乙個專案裡面可能使用到不同的資料庫(比如:普通資料和檔案資料等分別存到不同資料庫中),也有可能會跨伺服器查詢,所以這裡首先建立乙個配置檔案幫助類,主要是可以進行多個資料庫配置,滿足跨伺服器,跨資料的需求。
配置格式如下:
<?xml version="1.0" encoding="utf-8" ?>xml序列化物件類
讀取配置檔案管理類
2.實體通用介面
mongodb中本身沒有自增id的屬性,自帶有乙個objectid,為了統一每個實體物件都有這個id ,這裡建立乙個通用介面和乙個底層實體基類來進行規範化處理
實體介面
底層實體基類
實體類的例子(繼承於basemodel類)
3.mongodb通用幫助基類 (主要類)
4.業務類
當新建乙個表(mongodb裡面叫做集合),需要對其進行操作,包括一些業務處理時。首先繼承mongodbbase類,然後使用init方法初始化物件,如下面的userservcices類
5.使用
以上就是自己封裝的整體邏輯和**,不過這裡面還有一些不明白和不足的地方,這裡提出來,希望大神們幫我解答下:
1.返回值問題
在添,刪,改的使用,根據官網提供的驅動,都有乙個writeconcernresult物件返回,可是在測試中發現,這個返回的物件永遠都是null
2.增加id問題
mongodb中本身沒有自增id的屬性,自帶有乙個objectid,如果我需要乙個自增id,是否是自己建乙個id屬性,然後在增加的時候自己控制+1?不過這樣是否效能上比較低,還要考慮多執行緒併發的情況下加鎖的問題。所以不知道這塊大家是怎麼去實現的?
3.分頁效率的問題
一開始分頁我是先將結果轉為queryable,然後在進行操作,這個**裡面有這段,暫時注釋掉了,後面再上看到了乙個前輩的mongodb分析後,改了下分頁的方式,測試過很快,但在帶條件獲取記錄行總數的時候,發現測試300w資料下,獲取總數需要600ms的時間,不知道是我方法用錯了還是有其他更好的?
mongodb入門:
官網驅動介紹:
分頁優化參考:
C 通用輸出類
using system using system.collections.generic using system.linq using system.web using system.xml.serialization using xiaofeng using newtonsoft.json u...
C 通用類 日誌記錄類
using system using system.collections.generic using system.io using system.linq using system.text using system.threading.tasks using system.web namesp...
C 通用類 日誌記錄類
using system using system.collections.generic using system.io using system.linq using system.text using system.threading.tasks using system.web namesp...