fastCSharp 1.6 内存数据库引擎及代码生成实例 发布

showjim 2014-02-26 08:44:15
如果你的服务器有大量空闲内存,会不会有一种可耻的感觉呢?如果内存不够大,应该花点钱买买这种感觉。
大内存相比于硬盘,不仅仅是程序跑得更快,更重要的是有效利用大内存能让程序开发更快捷。长期来说,节省的开发人工成本,相比于内存价格还是很划算的。
看看现在市面上出现了各种各样的内存数据库,忍不住凑了个热闹。花了一些时间写了个可嵌入的内存数据库物理引擎,以及代码生成实例。由于本人与C#版主caozhy有过不愉快,所以发到这个版块来了。

1.支持嵌入模式,也就是可以不需要服务端,直接本地函数调用。
2.支持代码生成模式与反射模式,反射模式序列化性能相比于代码生成模式可能相差2倍以上。
3.序列化采用二进制序列化,添加成员识别的二进制序列化性能相差在40%以下。
4.客户端在通讯层实现了并发请求合并处理

以往的代码生成实例一样,采用自定义属性配置环境参数,比如
[fastCSharp.setup.cSharp.memoryDatabase(CacheType = typeof(fastCSharp.memoryDatabase.cache.identityArray<,>), FileName = null, MinRefreshSize = 1, ClientType = typeof(fastCSharp.memoryDatabase.physicalClient<identity>), IsEmbed = false, IsIndexSerialize = true)]
对于代码生成模式,数据库操作代理就是 Model.memoryDatabase.Default,比如
private static memoryDatabase db = memoryDatabase.Default;
对于反射模式,数据库操作代理需要自己创建。嵌入模式与远程模式的数据库代理分别如下
private static fastCSharp.setup.cSharp.memoryDatabase.localTable<identity, int> db = fastCSharp.setup.cSharp.memoryDatabase.table.Open(new setup.cSharp.memoryDatabase.localTable<identity, int>(new fastCSharp.memoryDatabase.cache.identityArray<identity>()));
private static fastCSharp.setup.cSharp.memoryDatabase.remoteTable<identity, int> db = fastCSharp.setup.cSharp.memoryDatabase.table.Open(new setup.cSharp.memoryDatabase.remoteTable<identity, int>(new fastCSharp.memoryDatabase.PhysicalClient<identity>(), new fastCSharp.memoryDatabase.cache.identityArray<identity>()));
性能测试,采用的数据定义如下
        public abstract class data
{
public bool Bool;
public byte Byte;
public sbyte SByte;
public short Short;
public ushort UShort;
public int Int;
public uint UInt;
public long Long;
public ulong ULong;
public DateTime DateTime;
public float Float;
public double Double;
public decimal Decimal;
public Guid Guid;
public char Char;
public string String;
public bool? BoolNull;
public byte? ByteNull;
public sbyte? SByteNull;
public short? ShortNull;
public ushort? UShortNull;
public int? IntNull;
public uint? UIntNull;
public long? LongNull;
public ulong? ULongNull;
public DateTime? DateTimeNull;
public float? FloatNull;
public double? DoubleNull;
public decimal? DecimalNull;
public Guid? GuidNull;
public char? CharNull;
}
当成员String为null的时候,二进制序列化数据大概120+字节,成员识别二进制序列化数据大概350+字节。
采用10W对象数据为单位做写入测试,总数据量100W单线程循环10次。
对于远程模式分别测试了客户端单线程与多线程并发。
测试机 Inter(R) Celeron(R) M CPU 520 1.60GHz,测试耗时包括 物理层处理 + 网络通讯处理 + 客户端对象创建与序列化处理 + 简单的缓存同步更新操作。
代码生成模式+成员识别二进制序列化 [10W对象 + 序列化数据35M] 同步测试结果 / 异步测试结果
本地模式  1线程:平均耗时 0.7s,CPU 100%
远程模式 1线程:平均耗时 5.3s / 6.7s,CPU 100%
远程模式 2线程:平均耗时 3.4s / 5.5s,CPU 100%
远程模式 5线程:平均耗时 2.4s / 3.6s,CPU 100%
远程模式 10线程:平均耗时 2.1s / 2.6s,CPU 100%
远程模式 20线程:平均耗时 1.8s / 1.9s,CPU 100%
远程模式 25线程:平均耗时 1.8s / 1.9s,CPU 100%
远程模式 40线程:平均耗时 1.9s / 1.8s,CPU 100%
远程模式 50线程:平均耗时 2.2s / 1.8s,CPU 100%
远程模式 80线程:平均耗时 2.3s / 1.8s,CPU 100%
远程模式200线程:平均耗时 2.8s / 2.0s,CPU 100%
远程模式500线程:平均耗时 3.5s / 2.9s,CPU 100%
代码生成模式+普通二进制序列化 [10W对象 + 序列化数据12M] 同步测试结果
本地模式  1线程:平均耗时  0.53s,CPU 100%
远程模式 1线程:平均耗时 4.9s,CPU 100%
远程模式 2线程:平均耗时 3.1s,CPU 100%
远程模式 5线程:平均耗时 1.9s,CPU 100%
远程模式 10线程:平均耗时 1.5s,CPU 100%
远程模式 20线程:平均耗时 1.4s,CPU 100%
远程模式 25线程:平均耗时 1.4s,CPU 100%
远程模式 40线程:平均耗时 1.3s,CPU 100%
远程模式 50线程:平均耗时 1.3s,CPU 100%
远程模式 80线程:平均耗时 1.4s,CPU 100%
远程模式200线程:平均耗时 1.8s,CPU 100%
远程模式500线程:平均耗时 2.8s,CPU 100%
反射模式+成员识别二进制序列化 [10W对象 + 序列化数据35M] 同步测试结果
本地模式  1线程:平均耗时 2.9s,CPU 100%
远程模式 1线程:平均耗时 8.4s,CPU 100%
远程模式 20线程:平均耗时 4.3s,CPU 100%
远程模式 40线程:平均耗时 4.3s,CPU 100%
远程模式 80线程:平均耗时 4.6s,CPU 100%
反射模式+普通二进制序列化 [10W对象 + 序列化数据12M] 同步测试结果
本地模式  1线程:平均耗时  3.1s,CPU 100%
远程模式 1线程:平均耗时 8.4s,CPU 100%
远程模式 20线程:平均耗时 4.2s,CPU 100%
远程模式 40线程:平均耗时 4.2s,CPU 100%
远程模式 80线程:平均耗时 4.4s,CPU 100%
...全文
994 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
雪狐 2014-05-15
  • 打赏
  • 举报
回复
Mark一下,以备学习之用!
风一样的大叔 2014-02-28
  • 打赏
  • 举报
回复
我是来学习的
showjim 2014-02-26
  • 打赏
  • 举报
回复
补充说明:测试结果有点虚,我的本本0.7s可写不了35M数据,因为windows2003操作系统有硬盘写入缓冲,程序跑完了硬盘还要闪一阵。 而对于读取测试,可以手动清除操作系统硬盘缓存,我的本本读取35M数据需要2s。
SQL Server 2005微软官方权威参考书.   公球公认SQL Server 2005 经典著作..   数据库“铁人”、微软MVP胡百敬先生鼎力推荐   微软SQL Server 总部Principal Group 项目经理朱凌志鼎力推荐   本书详细介绍了数据引擎的基础运作,包含了数据库的设定与数据实际在硬盘的摆放、索引结构、事务与锁定等。除了解释设计理念与运作原理外,还辅之以测试验证的方式。数据库开发者和管理员可从中获得最优的方法、务实的建议和实例代码来帮助他们掌握创建和维护企业级关系数据库所需的复杂技术。该书获得资深专家关于创建和维护健壮数据库的高屋建瓴般的视野和入木三分的剖析,十分适合有一定数据库基础的读者学习。 内容简介 本书是Inside Microsoft SQL Server 2000的作者Kalen Delaney的又一经典著作,是Inside Microsoft SQL Server 2005系列四本著作中的一本。本书对SQL Server 2005存储引擎方面的知识进行了全面而详细的阐述,包括数据库文件、日志和恢复、表、索引及其管理、锁定和并发等内容。除了解释设计理念与运作原理外,书中还辅之以大量简短而有力的实例。您将跟随一位广受欢迎的作家同时也是SQL Server资深专家一起深入探索SQL Server存储引擎的技术内幕。   本书适合于专业数据库开发者、BI开发者、DBA和以SQL Server作为后台数据库的一般应用程序开发者。本书不仅适合SQL Server 2005的初级读者,也适合SQL Server 2005的中高级读者。读者可以从中获得最优的方法、务实的建议和实例代码来帮助他们掌握创建和维护企业级关系数据库所需的复杂技术。本书是所有SQL Server 2005用户的案头必备之书。 作者简介 Kalen Delaney,她还是微软出版社inside SQL Sever丛书的编辑。她从1987年开始便一直从事SQL Server相关的工作,1995年被评为MVP(微软最有价值专家》。她同时也是Solid Quality Learning的首席顾问和创始人。除此之外,她还是SQL Server Magazine的优秀编辑和专栏作家,她还写作了大量的SQL Server类书籍,包括著名的Inside Microsoft SQL Server2000。 目录 前言 致谢 引言 第1章 SQL Server 2005 的安装与升级  1.1 SQL Server 2005安装前提   SQL Server 2005 版本   软件要求   硬件要求  1.2 安装前决策   安全性和用户上下文   字符与排序规则   排序次序   安装SQL Server的多个实例   安装SQL Server命名实例  1.3 做好安装准备   SQL Server 2005升级向导  1.4 迁移还是升级   迁移   升级   升级后的操作  1.5 选择组件   SQL Server数据库服务(数据库引擎)   Analysis Services   Reporting Services   Notification Services   Integration Services   工作站组件、联机丛书及开发工具  1.6 小结 第2章 SQL Server 2005体系结构  2.1 SQL Server引擎组件   观测数据库引擎行为   协议   表格格式数据流(TDS)端点   关系引擎   存储引擎   SQLOS  2.2 内存   缓冲池和高速数据缓冲区   访问内存中的数据页   管理数据高速缓冲区中的页面   检查点   管理其他高速缓存中的内存   调节内存大小   调节缓存池大小  2.3 小结 第3章 SQL Server 2005的配置  3.1 使用SQL Server 配置管理器   配置网络协议   默认的网络配置   管理服务  3.2 系统配置   任务管理   资源分配   系统分页文件的位置   非必需的服务   网络协议   与SQL Server 早期版本之间的兼容性   跟踪标记(Trace Flags)   SQL Server 的配置设定   内存选项   调度选项(Scheduling Options)   磁盘I/O 选项   查询处理选项   默认跟踪(Default Trace)  3.3 小结 第4章 数据库数据库文件 第5章 日志和恢复 第6章 表 第7章 索引的内部构造和管理 第8章 锁定和并发

17,748

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧