ASP.NET新人学习笔记-数据库篇

仅作为学习记录使用,以及其他新人做参考。

主要还是说一下数据库分页的东西把。作为刚刚大三出来实习的新人,数据库的分页上面还是不太熟练,一下是最近的实习过程中使用到的和查阅资料总结的一些经验。如有错误,望指正

1.SQL server数据库分页:

sql server作为高校课程中使用最多的数据库,也是目前很多新人唯一会用的数据库(mysql差不多算在一起把),基础的增删查改就不做多余的赘述了,先来说说sql的分页把。

方案一:(在sql2012以上版本时可以使用Offset/Fetch Next方法实现)

select [column1]

      ,[column2]

      ...    

     ,[columnN]

from [tableName]

order by [columnM]

offset(pageIndex-1)*pageSize rows

fetch next pageSize rows only

稍微解释一下吧,offset(pageIndex-1)*pageSize rows字面意思的是偏移量,就是指从第多少条数据开始检索,相当于skip的作用,

fetch next pageSize rows only从检索开始的位置取接下来的pageSize条数据

offset/fetch next这个语法再老版本的服务器上可能不支持,但是再sql2012之后推荐使用,性能比较不错

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

SELECT TOP 页大小*

FROM TestTable

WHERE (ID >

          (SELECT MAX(id)

         FROM (SELECT TOP页大小*页数id

                 FROM表

                 ORDER BY id) AS T))

ORDER BY ID


其它方法,如使用rownumber,也是较为不错的方法,但使用环境局限,

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

Mysql差不多,但是mysql还有另外一个更简单的分页方法,使用limit,具体方法百度上有详细教程。


2.mongo数据分页

mongo对于很多在校大学生或者实习新人来说应该是陌生的,同样也是我第一款接触到的NoSql(Not Only SQL)即非关系型数据库,再刚开始用的时候可以说是完全找不到头绪。但是会用了之后,还是能明显感觉到nosql数据库再处理大量数据存储事务上,其效率还是要比传统的sql数据库快一些。但是相应的,nosql数据库对于数据的一致性的保持上是不如sql数据库的。

C#使用mongo有一点需要注意,不同版本的驱动,语法不同,redis也一样,

我这里使用的是

使用的驱动

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

方案一:条件查询 原生Query实现

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数据库本身就带有的语法,封装到了Query类中,效率的话还是不错,

方案二:Skip原生Query实现

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

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

有一点需要注意的是,setlimit方法与setskip方法的使用需要注意其调用顺序

方案三: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作为一个在实际业务中广泛使用的数据库 ,其效率自然是不用说的,但一般是作为缓存库来用。自己做测试时需要注意的是,必须要把redis的服务运行起来,才能成功连接到redis数据库

连接

usingServiceStack;

usingServiceStack.Commands;

usingServiceStack.Text;

usingServiceStack.Redis;

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


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

//参数说明:连接地址,连接端口,连接密码,连接数据库(从数据库集合中通过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会将该数据替换为新的数据,例如原数据为id:xxxx{xx:xx,yy:yy}新数据为id:xxxx{xx:yy}则更新后,结果并不是id:xxxx{xx:yy,yy:yy}而是id:xxxx{xx:yy},

redis非覆盖更新思路(仅供参考)

还有过期时间也会被重写,要保持过期时间不变,需要保存好

获取键名为KeyName的值的数据的剩余过期时间

mongo的update也是覆盖更新,要实现非覆盖更新可以再更新之前先将元数据保存下来,将要修改的数据更新到保存的数据中,再将这条数据写回去


mongo非覆盖更新思路(仅供参考)

4.MemCached连接与使用

memcached作为一款存储在内存中的数据库,作为缓存使用其效率也是非常的高

memcached的驱动也有很多版本,我这里使用的是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));//参数说明:模式,键名,键值,过期时间

删除

client.Remove(KeyName);

查询

client.Get(KeyName).ToString();

修改

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

以上都是个人见解,若有错误,敬请指教,避免误导他人。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,539评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,911评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,337评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,723评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,795评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,762评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,742评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,508评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,954评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,247评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,404评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,104评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,736评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,352评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,557评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,371评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,292评论 2 352

推荐阅读更多精彩内容