除了图形功能外,在线游戏应该有一个简单的关系数据库结构。我很好奇数据库在Farmville
和MafiaWars
这样的在线游戏使用了什么?
将这种基于SQL的数据库用于此类频繁写入的程序是否切实可行? 如果没有,那么如何在这些游戏中存储用户的关系依赖性呢?
编辑:正如所指出的,他们使用像Couchbase
这样的NOSQL数据库。 NOSQL速度快,具有良好的功能(这里真的需要);但是sotrage的规模要大得多(由于键/值结构)。
1.它是否会减慢系统速度(因为我们需要从磁盘读取大型数据库文件)?
2.我们将非常有限,因为我们没有SQL JOIN
来连接不同的数据集。
答案 0 :(得分:9)
这些数据库扩展到大约500,000 operations per second,并且它们是大规模分发的。 Zynga仍然使用SQL作为日志,但对于游戏数据,他们目前使用的代码与Couchbase基本相同。
“Zynga的目标很简单:我们需要一个能够满足我们游戏挑战性需求的数据库,同时最大限度地降低每个数据库操作的平均满载成本 - 包括资本设备,管理成本和开发人员生产力。我们评估了许多NoSQL数据库技术,但都达不到我们的严格要求。我们的membase开发工作与NorthScale和NHN的工作相吻合,我们很高兴为开源社区贡献我们的代码,并赞助继续努力维护和增强软件。“ - Cadir Lee,首席技术官,Zynga
答案 1 :(得分:3)
他们使用的数据库has been reported to be Membase。它是开源的,也是众多nosql数据库中的一个。
2012年1月,Membase成为Couchbase,如果您想尝试,可以download it here。
答案 2 :(得分:3)
回答你的编辑:
您可以使用非密钥=>值存储(如MongoDB)来减小存储空间大小。这仍然有一些开销,但不如试图维护一个key =>值存储。
由于相当多的NoSQL产品是内存映射的,因此不会对系统造成太大的影响,这意味着与SQL不同,它不会直接转到磁盘,而是转移到fsync队列,然后在它很方便时写入磁盘。对于那些没有内存映射的NoSQL解决方案,它们具有极快的读/写速度,通常情况下两者之间需要权衡。
对于JOIN,这是一种以可以避免巨大连接的方式排列模式的情况。加入的小连接说,具有他的得分记录的用户很好但是聚合连接将是一个问题,你需要找到其他方法来解决这个问题。各种NoSQL产品的用户群提供了许多解决方案。