首先来看一下数据库设计。
游戏的数据库设计是项目基础设计中很重要的一个环节,下面将说明以下几个 要点:
u 为什么选用SqlServer
u 基本原则
u 表关系的设置
u 数据的冗余设计
u 什么时候使用存储过程
u 什么时候使用EntityFramework什么时候使用ADO.NET
1.为什么先用SQL Server
首先,不要对SQL Server的性能表示怀疑。作为WebGame应用来讲,它的吞吐 能力,承载能力完全够用。
第二,如果服务代码是使用C#来编写的,那么SQL Server2005/2008能得到最 好的C#/Visual Studio兼容性。最重要的是C#中很多组件都是为SQL Server设计 的,并且做了很多优化,例如:EntityFramework,SQL CLR等。
第三,SQL Server中支持SQL CLR功能,即可以使用C#/VB.NET来编写自定义函 数,存储过程等,对于熟悉C#的开发人员来讲是一个福音,不仅仅是代码编写规 则熟悉,而且可以使用一部分.NET类库来实现想要的功能,比如说基本.NET类型 ,数学运算,WCF等功能。
第四,可能很多人都觉得使用SQL CLR是因为T-SQL用的不精,其实不然,SQL CLR实际上是利用C#写好DLL文件,然后被SQL Server调用,本质上利用了.NET来 提高SQL Server的性能,在某些情况下SQL CLR的效率要高于T-SQL。
2.基本原则
在设计游戏数据库时千万别怕表多,在一个常规的网页游戏中,数据表的数量 应该大于150。因为一个游戏项目,细分起来,是由少则10几个,多则几十个子系 统组织起来的,每个系统都有若干张表来辅助存储。
另外,游戏系统的数据库可以按状态分为:配置数据存储表(如基本数值配置 ),状态数据存储表(如计时),以及数据极不稳定的用来表示某个物件所属的 中间关系数据表(如某个用户招募了某一个军官)。总之,要事无巨细,将90%的 数据以数据库的形式存储起来。这么作的原因在于,游戏中很多的数据都是敏感 数据,如金币,某个物件的数量等,如果将过多的数据存储于内存中,一旦服务 掉电,丢失的数据将无法挽回,客服的电话会被打爆的。
当然,如果将大多数数据存储在数据库,反复读写所带来速度问题,也是不可 以忽略的,解决方法如下:
u 客户端在加载的时候,就把常用的只读配置数据存储到客户端。
u 客户端要修改数据时,先修改客户端的数据,然后立即显示出来,最后再 异步调用服务器的接口,去修改数据。
u 如果客户端一定要等待服务器的处理结果,那么就直接利用异步方式调用 服务器接口,但是一定要给用户提示,防止误操作的产生。
u 服务器一定要将常用的数值计算的操作数和结果储存在内存中,以提高响 应速度,例如:游戏中常常用到Pow函数,那就在内存中建立一个Pow的函数值表 ,每次调用时,就直接从表中取出来。