ASP.NET新人學習筆記-數(shù)據(jù)庫篇

僅作為學習記錄使用干跛,以及其他新人做參考稳析。

主要還是說一下數(shù)據(jù)庫分頁的東西把。作為剛剛大三出來實習的新人梳虽,數(shù)據(jù)庫的分頁上面還是不太熟練址芯,一下是最近的實習過程中使用到的和查閱資料總結(jié)的一些經(jīng)驗。如有錯誤窜觉,望指正

1.SQL server數(shù)據(jù)庫分頁:

sql server作為高校課程中使用最多的數(shù)據(jù)庫谷炸,也是目前很多新人唯一會用的數(shù)據(jù)庫(mysql差不多算在一起把),基礎的增刪查改就不做多余的贅述了禀挫,先來說說sql的分頁把旬陡。

方案一:(在sql2012以上版本時可以使用Offset/Fetch Next方法實現(xiàn))

select [column1]

????? ,[column2]

????? ...????

???? ,[columnN]

from [tableName]

order by [columnM]

offset(pageIndex-1)*pageSize rows

fetch next pageSize rows only

稍微解釋一下吧,offset(pageIndex-1)*pageSize rows字面意思的是偏移量语婴,就是指從第多少條數(shù)據(jù)開始檢索描孟,相當于skip的作用驶睦,

fetch next pageSize rows only從檢索開始的位置取接下來的pageSize條數(shù)據(jù)

offset/fetch next這個語法再老版本的服務器上可能不支持,但是再sql2012之后推薦使用匿醒,性能比較不錯

方案二:(利用ID大于多少和SELECT TOP分頁)

SELECT TOP 頁大小*

FROM TestTable

WHERE (ID >

????????? (SELECT MAX(id)

???????? FROM (SELECT TOP頁大小*頁數(shù)id

???????????????? FROM表

???????????????? ORDER BY id) AS T))

ORDER BY ID


其它方法场航,如使用rownumber,也是較為不錯的方法廉羔,但使用環(huán)境局限溉痢,

Limit skip只有在mysql和特定的SQL server版本中可以使用,

Mysql差不多憋他,但是mysql還有另外一個更簡單的分頁方法适室,使用limit,具體方法百度上有詳細教程举瑰。


2.mongo數(shù)據(jù)分頁

mongo對于很多在校大學生或者實習新人來說應該是陌生的捣辆,同樣也是我第一款接觸到的NoSql(Not Only SQL)即非關系型數(shù)據(jù)庫,再剛開始用的時候可以說是完全找不到頭緒此迅。但是會用了之后汽畴,還是能明顯感覺到nosql數(shù)據(jù)庫再處理大量數(shù)據(jù)存儲事務上,其效率還是要比傳統(tǒng)的sql數(shù)據(jù)庫快一些耸序。但是相應的忍些,nosql數(shù)據(jù)庫對于數(shù)據(jù)的一致性的保持上是不如sql數(shù)據(jù)庫的。

C#使用mongo有一點需要注意坎怪,不同版本的驅(qū)動罢坝,語法不同,redis也一樣搅窿,

我這里使用的是

使用的驅(qū)動

前提:MongoCollection collection = db.GetCollection("Users")嘁酿;

方案一:條件查詢 原生Query實現(xiàn)

var query =Query.GT(item => item.Amount, 2399927);

var result =collection.Find(query).SetLimit(100).SetSortOrder(SortBy.Ascending("amount")).ToList();

Console.WriteLine(result.First().ToJson());//BSON自帶的ToJson

這個方法使用的其實是mongo數(shù)據(jù)庫本身就帶有的語法,封裝到了Query類中男应,效率的話還是不錯闹司,

方案二:Skip原生Query實現(xiàn)

var result =collection.FindAll().SetSkip(100000).SetLimit(100).SetSortOrder(SortBy.Ascending("amount"));

Console.WriteLine(result.ToList().First().ToJson());

有一點需要注意的是,setlimit方法與setskip方法的使用需要注意其調(diào)用順序

方案三:Linq 條件查詢

var result =collection.AsQueryable().OrderBy(item => item.Amount).Where(item=>item.Amount>2399927).Take(100);Console.WriteLine(result.First().ToJson());

linq相信熟悉c#的都不會陌生了沐飘,這里使用了lambda表達式作為Linq查詢的條件游桩,

方案四:Linq Skip版本

var result =collection.AsQueryable().OrderBy(item =>item.Amount).Skip(100000).Take(100);Console.WriteLine(result.First().ToJson());

同方案三,都是使用了c#的linq耐朴,使用時要引用命名空間借卧。



3.Redis連接與使用

redis作為一個在實際業(yè)務中廣泛使用的數(shù)據(jù)庫 ,其效率自然是不用說的筛峭,但一般是作為緩存庫來用铐刘。自己做測試時需要注意的是,必須要把redis的服務運行起來蜒滩,才能成功連接到redis數(shù)據(jù)庫

連接

usingServiceStack;

usingServiceStack.Commands;

usingServiceStack.Text;

usingServiceStack.Redis;

//需要添加nuGet包里的serviceStack相關的包


private RedisClient redis = new RedisClient("127.0.0.1", 6379, "", 1);

//參數(shù)說明:連接地址滨达,連接端口奶稠,連接密碼,連接數(shù)據(jù)庫(從數(shù)據(jù)庫集合中通過index選擇)

插入

redis.Add(key name, key value ,expired

time);//新增鍵名 鍵值 過期時間

實例:redis.Add(users.UserId.ToString(),

users,DateTime.Now.AddMilliseconds(1000*60*60*2));// Users是一個實體類

查詢

redis.Get(key name);

實例:Users users =redis.Get(UserId.ToString());

刪除

redis.Remove(key name);

更新

redis.Set(key name, new key value,expiredtime)

注意

這里需要注意到是捡遍,set會將該數(shù)據(jù)替換為新的數(shù)據(jù)锌订,例如原數(shù)據(jù)為id:xxxx{xx:xx,yy:yy}新數(shù)據(jù)為id:xxxx{xx:yy}則更新后,結(jié)果并不是id:xxxx{xx:yy,yy:yy}而是id:xxxx{xx:yy}画株,

redis非覆蓋更新思路(僅供參考)

還有過期時間也會被重寫辆飘,要保持過期時間不變,需要保存好

獲取鍵名為KeyName的值的數(shù)據(jù)的剩余過期時間

mongo的update也是覆蓋更新谓传,要實現(xiàn)非覆蓋更新可以再更新之前先將元數(shù)據(jù)保存下來蜈项,將要修改的數(shù)據(jù)更新到保存的數(shù)據(jù)中,再將這條數(shù)據(jù)寫回去


mongo非覆蓋更新思路(僅供參考)

4.MemCached連接與使用

memcached作為一款存儲在內(nèi)存中的數(shù)據(jù)庫续挟,作為緩存使用其效率也是非常的高

memcached的驅(qū)動也有很多版本紧卒,我這里使用的是enyim的,

usingEnyim.Caching;

usingEnyim.Caching.Memcached;

//需要添加nuGet包里的enyim


private MemcachedClient client = newMemcachedClient( );

static readonly object padlock = new object();

保存

client.Store(StoreMode.Set, KeyName,

KeyValue, DateTime.Now.AddMilliseconds(1000 * 60 * 5));//參數(shù)說明:模式诗祸,鍵名跑芳,鍵值,過期時間

刪除

client.Remove(KeyName);

查詢

client.Get(KeyName).ToString();

修改

client.Store(StoreMode.Replace, KeyName,KeyValue, DateTime.Now.AddMilliseconds(1000 * 60 * 5))

以上都是個人見解直颅,若有錯誤博个,敬請指教,避免誤導他人功偿。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盆佣,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子械荷,更是在濱河造成了極大的恐慌共耍,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,000評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件养葵,死亡現(xiàn)場離奇詭異征堪,居然都是意外死亡,警方通過查閱死者的電腦和手機关拒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來庸娱,“玉大人着绊,你說我怎么就攤上這事∈煳荆” “怎么了归露?”我有些...
    開封第一講書人閱讀 168,561評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長斤儿。 經(jīng)常有香客問我剧包,道長恐锦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,782評論 1 298
  • 正文 為了忘掉前任疆液,我火速辦了婚禮一铅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘堕油。我一直安慰自己潘飘,他們只是感情好,可當我...
    茶點故事閱讀 68,798評論 6 397
  • 文/花漫 我一把揭開白布掉缺。 她就那樣靜靜地躺著卜录,像睡著了一般。 火紅的嫁衣襯著肌膚如雪眶明。 梳的紋絲不亂的頭發(fā)上艰毒,一...
    開封第一講書人閱讀 52,394評論 1 310
  • 那天,我揣著相機與錄音搜囱,去河邊找鬼现喳。 笑死,一個胖子當著我的面吹牛犬辰,可吹牛的內(nèi)容都是我干的嗦篱。 我是一名探鬼主播,決...
    沈念sama閱讀 40,952評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼幌缝,長吁一口氣:“原來是場噩夢啊……” “哼灸促!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起涵卵,我...
    開封第一講書人閱讀 39,852評論 0 276
  • 序言:老撾萬榮一對情侶失蹤浴栽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后轿偎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體典鸡,經(jīng)...
    沈念sama閱讀 46,409評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,483評論 3 341
  • 正文 我和宋清朗相戀三年坏晦,在試婚紗的時候發(fā)現(xiàn)自己被綠了萝玷。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,615評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡昆婿,死狀恐怖球碉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情仓蛆,我是刑警寧澤睁冬,帶...
    沈念sama閱讀 36,303評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站看疙,受9級特大地震影響豆拨,放射性物質(zhì)發(fā)生泄漏直奋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,979評論 3 334
  • 文/蒙蒙 一施禾、第九天 我趴在偏房一處隱蔽的房頂上張望脚线。 院中可真熱鬧,春花似錦拾积、人聲如沸殉挽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,470評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽斯碌。三九已至,卻和暖如春肛度,著一層夾襖步出監(jiān)牢的瞬間傻唾,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,571評論 1 272
  • 我被黑心中介騙來泰國打工承耿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留冠骄,地道東北人。 一個月前我還...
    沈念sama閱讀 49,041評論 3 377
  • 正文 我出身青樓加袋,卻偏偏與公主長得像凛辣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子职烧,可洞房花燭夜當晚...
    茶點故事閱讀 45,630評論 2 359

推薦閱讀更多精彩內(nèi)容