哪个DBMS足够快(足以容纳数千名玩家)进行在线游戏?[关闭]


8

我目前正在制作MMORPG游戏,该游戏可能同时有数千名玩家在线(可能不是;只是一厢情愿)。首先,我们想使用MySQL,但是我听说它还不够快。

哪个DBMS足够快?它有多像SQL Server(就像我在学校学到的那样)?


作为参考,《魔兽世界》基于Oracle。
Philᵀᴹ

无论您选择哪种DBMS,都不要忘记考虑许可。也许您的免费版本适用于小负载,但是如果必须扩展或横向扩展,则可能会遇到严重的贴纸震动情况。
datagod 2012年

Answers:


24

这是一个很难回答的问题。您可以采用世界上最快的数据库平台,设计一个可怕的架构,围绕它编写一个糟糕的应用程序,然后很容易将其归咎于数据库平台。同时,您可以使用免费的SQL Server Express,并通过正确的设计,应用程序逻辑和合理的可伸缩性方法(例如,通过数据缓存扩展读取范围等),可以编写处理1000个以下内容的应用程序。用户没问题。

我相信SQL Server可以处理数千名用户吗?绝对。我相信Oracle和DB2也可以做到吗?当然。MySQL的?不确定,那里的经验不足。访问?可能根本不是明智的选择。如果您熟悉SQL Server,那么我建议您考虑采用这种方法,请记住,您对RDBMS的选择本身并不会决定成功或失败。


好吧,我只需要一个准则。这并不是说一个小型独立游戏会立即达到成千上万的同时用户。谢谢!
西蒙·韦贝克

3
尽管您可能不打算立即击中成千上万的用户,但是如果您从一开始就没有正确地计划,那么最终您将不得不停电或至少出现一些严重的问题一会儿,而您正在解决问题。
mrdenny

是的,这是一篇及时的文章,解释了基于“我们永远不会变得庞大”的论点,facebook现在对他们最初的设计决策有何感觉:gigaom.com/cloud / ... ...刚刚注意到这篇文章也被引用罗兰多的答案
亚伦·伯特兰

@Aaron:好东西。+1为您解答,因为围绕MMORPG的软件基础结构应该是数据库不可知的,并且仍然表现出来!!!
RolandoMySQLDBA 2011年

12

让我这样说,还记得2000年代初/中期的GameSpy Arcade吗?它运行了数千个游戏,并且都在SQL Server上运行,并且一次支持成千上万的用户(是的,我们在那里有多个SQL Server可以做各种事情)。这一切都与数据库的设计以及如何使用系统有关。正确执行此操作,您的项目将成功,错误执行此操作,您的项目将严重失败。


很高兴知道有关GameSpy的信息,尤其是自从我使用它以来。一直以来都不了解SQL部分。
StanleyJohns

1
别忘了,那时的最新版本是SQL 2000,我们有1+十亿行表。我们有一个很好的代表,可以使系统在高负载下保持在线状态。
mrdenny

11

正确的答案在很大程度上取决于您要为其编程的平台。

碰巧的是,大约1.5年前有人在StackOverflow中针对特定平台问了这个问题。

无论是MySQL,SQL Server,Oracle,PostgreSQL还是其他一些RDBMS,您都必须在数据库基础结构方面非常有创造力。如果您有关于硬件的开放式支票簿和具有行业实力的DBMS,那么Oracle适合您(如果更希望使用Oracle RAC)。如果您使用IIS和Microsoft环境进行开发,则始终使用SQL Server。如果您有预算方面的问题,并且希望使用Oracle外观,则可以使用PostgreSQL。如果您有预算方面的问题,生动的想像力,并且想要按照自己的喜好对存储引擎进行微管理,以适应ACID要求,高速读取和各种复制体系结构,那么我会偏见地说MySQL。

对于MMORPG,DBMS应该是最少的后顾之忧。编程问题总会带来更大的鱼苗。因此,请谨慎,明智地做出决定,因为无论选择哪种DBMS,都必须使用它(与FaceBook必须与MySQL一起使用的方式相同)。


2
这是我今天看到的那篇Facebook文章的第三个参考。这是一篇很好的文章。
mrdenny

2
+1。MySQL通常被忽略,但是它是一个非常强大的RDBMS。
StanleyJohns,2011年

7

这不是正确的问题。游戏的性能将取决于您选择的完整体系结构和技术堆栈以及实现方式。DBMS只是堆栈的一个组件。我可能会猜测,除非您的架构设计不佳,否则DBMS不太可能成为性能的限制因素。域层,缓存以及站点的分布和扩展方式似乎是更重要的问题。


5

任何RDBMS都会随着规模的增长而下降,具体取决于其配置,缩放和应用程序使用方式。

我认为,您有两个问题合而为一。首先,“什么DBMS能够以有效的方式保留游戏数据。” (主观的,恕我直言)第二,“如何扩展DBMS以使其具有数千名用户执行?”

许多在线服务都发现MySQL和Memcached的结合可以提供出色的性能和可扩展性。但是,有时解决方案也会下降。但是,这可能正是您所需要的。

越来越多的在线服务将NoSQL解决方案夹在其体系结构中。我对CouchBase有一些经验,发现它很有用。


4

代码,设计和磁盘(用于写入)通常决定性能。不是平台。


2

您可以看一下CUBRID。这是一个开源RDBMS,目前在韩国非常热门。假设对于拥有大量用户(他们说50k之类)的Web应用程序,效果最好/速度非常快。


实际上,CUBRID不仅是关系DBMS,而且还提供对象功能。该物体的部分是什么游戏开发者的需求。在CUBRID中,您可以轻松创建用户定义类型。例如。一个表可以有一个列,该列的数据类型与另一个表类似,例如:CREATE TABLE a(id INTEGER AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255)); 创建表b(id INTEGER AUTO_INCREMENT PRIMARY KEY,custom_column a); 这种类型的功能对游戏开发者来说非常有价值。韩国流行的在线游戏均基于CUBRID。

2

我认为,如果设计得当,任何主要数据库都可以处理负载。可悲的是,我估计所有数据库中只有不到1%的设计良好。(我亲自处理了来自成千上万个执行各种功能的不同数据库中的数据,因此我认为现实世界中缺乏质量是个好主意。)

我强烈建议您获得一些有关所选数据库性能调优的书,并在开始设计之前全面阅读它们。从一开始就应该设计很多东西来帮助您的数据库更好地运行。仅仅知道如何编写性能查询和设计索引对于获得良好的设计至关重要。这种类型的研究和设计的性能不是过早的优化。根本没有理由在设计中使用已知的性能降低技术。从一开始就需要设计数据库以提高性能。


0

我们的移动游戏拥有数千名玩家,通过转到持久的IIS / .NET mysql连接池,我们看到了负载的巨大下降。MySQL 5.1

考虑将“只写”数据保留在其他位置,以减少甚至选择Cassandra或syslog的任何数据库上的负载。考虑将快速变化的,高度瞬态的但可重构的数据保持在诸如memcache,riak等的nosql数据库中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.