所属栏目:游戏数据库 > 兴趣爱好 > 经验交流
数据库设计上大家有什么经验交流下,我初步想法是所有数据库写进一个原始的数据库服务器(MSSQL2000),然后用SQL的复制功能同步几个镜象数据库服务器,当执行查询的时候,程序自动分流在不同镜象数据库里查询数据.不过这方案的问题在于原始数据库的写操作数据量可能存在瓶径,数据量过大冲击,原始数据库万一撑不住.系统就瘫痪了.(大家按10万在线的游戏考虑下,给点建议)
希望大家别给我说到LINUX去,我不懂LINUX
其实问题在于你的内存,数据写入的时候将先进入内存。如果你的内存是8GB,你并不能把所有的内存全部分配给数据库,起码留500MB给操作系统,这样就不会产生死锁现象,系统基本上不会滩掉了,关于数据分配内存在查询分析器里面用语言实现,语言如下:
EXECsp_configure'maxservermemory',在这个后面就是你想分配的内存。
不一定需要采用镜像,采用分布式数据库系统,将数据表进行分区,分区后的数据分别存放在不同的数据库服务器上,通过分区视图关联。写数据时并非对每一个数据库进行写操作,而是将I/O也分流到了多台数据库服务器上。
不做镜象是不可以的,对于玩家来说数据是非常重要的,如果你的数据丢了,玩家就不可能在玩你的游戏了。如果不做镜像,硬盘坏了,那就彻底的玩完了。
为什么不考虑多个服务器,多个数据库呢(分布式)?
将玩家分配由不同的服务器来支撑,你有10台服务器,10万玩家的话,一台服务器只需要应付1万玩家.
通过在每台服务器上建立其他服务器的数据库做为备份(可能事务传送),就可以实现每台服务器上均有其他9台数据库的数据,而且一台服务器上的数据被9台服务器备份.
通过在每台服务器建立分区视图来合并所有数据库中的表,就可以实现在任意一台服务器上可以检索出数据.
libin_ftsafe(子陌红尘)大哥说的听起来好象很可行不过对数据库方面不精通只懂些SQL语句和基本的,有没详细实现方式麻烦给下,谢谢
xioaxiaobingyuxue(雨学)说的主要是控制内存分配,但是I/O读写好象也是数据库最大的瓶径,内存分配可以解决数据量大的查询,但是好象写的时候磁盘才是问题关键吧?
zjcxc(邹建)说的没搞懂你的方法和我不同是数据库服务器之间任意一台修改了其他服务器都可以同步吗?是这意思不?
昨天有个朋友给的方案是直接把经常用的数据放到内存处理,不直接操作数据库,这方案以前好象看过在哪,应该算比较可行.有没人继续讨论?
我指的是一个服务器只承受部分用户的处理
看看联机帮助上的分布式分区视图会对你有帮助.
放在内存中比较恐怖吧?首先要求你的内存大,其实要求你的服务器够稳定,因为内存的数据的话,如果电脑有一点问题都可能出事,而内存够大的话,频繁虚拟内存物理内存的切换也得不偿失.
明白你的意思了不过这样设计其中1服务器出问题好象部分用户就要受影响了?
放在内存中主要是这样的过程:1个用户登陆进来就从数据库读数据放到内存中,然后更新只更新内存数据,定期把内存数据写入数据库,用户退出时候也写入数据库,从内存中销毁此用户数据.服务器故障肯定要丢失一段时间的数据不过丢失不是很严重
大概你没用过日志传送功能吧?
如果你用过,你就知道,主服务器出故障时,其实可以立即启用备用服务器来代替损坏的服务器进行工作,所以不会受影响.
牛bb文章网欢迎您转载分享:http://www.niubb.net/article/2062833-1/1/