- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
ORM组件XCode(撬动千万级数据)
ORM组件XCode(撬动千万级数据)
有了前面的《动手》,基本上可以进行开发了。本篇我们来试试XCode的基本功功力如何,测试在单表一千万业务数据的环境下查询的速度,添删改等没什么可测试的。其实应该说是XCode开发模式的功力,XCode组件仅仅是处理分页而已,而XCode开发模式为高性能开发提供了更多的建议。
测试环境:双核CPU,4G内存,win7+SQL2008+vs2010
数据表字段包括:自增ID、车牌、时间。使用SQL准备一千万测试数据,花了将近一个小时。
测试用例:ID的升序降序,时间的升序降序,每一种情况测试取首页、中间页、尾页的时间。
XCode开发模式非常看重分页,基本上所有集合查询方法都带有分页参数。Entity层只负责生成获取满足条件的所有数据的SQL,加上分页参数后传递给下层数据访问层,自身不处理问题。数据访问层调用IDatabase接口的PageSplit方法,把上述的SQL处理为只获取指定页的SQL,然后再执行查询操作。因为不同的数据库分页方法不同,所以XCode的这种架构让使用者无需关心采用哪一种分页方法。测试环境是SQL2008,所以自动采用row_number分页。
首先建立数据表
CREATE TABLE [dbo].[test](
[ID] [int] IDENTITY(1,1) NOT NULL,
[HPHM] [varchar](50) NULL,
[JGSJ] [datetime] NOT NULL,
CONSTRAINT [PK_CLTXJL] PRIMARY KEY CLUSTERED
(
[ID] DESC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
使用SQL语句插入一千万行数据
declare @i int
set @i=0
while @i100
begin
insert into test values(鄂A94450,getdate())
insert into test values(鄂A92355,getdate())
(这里是更多数据插入语句)
set @i=@i+1
end
GO
再看看我们准备的测试代码
static void Test2()
{
Stopwatch sw = new Stopwatch();
sw.Start();
Console.WriteLine();
DAL.AddConnStr(Center, Data Source=.;Initial Catalog=Center;User ID=sa;Password=Pass@word, null, sql2008);
IEntityOperate factory = DAL.Create(Center).CreateOperate(test);
sw.Stop();
Console.WriteLine(初始化:{0}, sw.Elapsed);
ICollection list = factory.FindAll(null, null, null, 100000, 1);
DateTime dt = DateTime.Now;
foreach (IEntity item in list)
{
dt = (DateTime)item[JGSJ];
break;
}
//String where = String.Format({0}={1} And {0}{2}, JGSJ, dt, dt.AddSeconds(100));
String where = String.Empty;
sw.Reset();
sw.Start();
Console.WriteLine();
Int32 count = factory.FindCount(where, null, null, 0, 0);
sw.Stop();
Console.WriteLine(查询总记录数:{0}, sw.Elapsed);
Console.WriteLine(总记录数:{0}, count);
Test2_0(sw, 默认顺序, count, where, null);
Test2_0(sw, 时间升序, count, where, JGSJ
文档评论(0)