noSQL数据库适合基于Web的游戏吗?
绝对!一般而言,非关系数据库(例如MongoDB)对于游戏来说要好得多,因为它们在数据建模方面更加灵活,同时比关系数据库(例如SQL)更高效-使它们“双赢”选择。
使用常规RDBMS可能会出现什么问题?
使用关系数据库有两个主要缺点:
数据建模方式缺乏灵活性是一个主要缺点,因为使用关系数据库会迫使您对数据进行建模以适应数据库的需求,而不是数据库能够适应模型的需求。例如,考虑您正在创建用于使用关系数据库在游戏中存储物品的模型,并决定采用以下模型:
weapon_type_id | weapon_type
1 | sharp
weapon_id | weapon| weapon_type_id | damage
1 | Short Sword | 1 | 5
potion_type_id | potion_type
1 | HP
2 | Mana
potion_id | potion| potion_type_id | modifier
1 | Healing Elixer | 1| 5
2 | Mana Drainer | 2| -5
现在考虑如何修改模型以满足以下要求:
- 新增项目类型
- 创建具有多种武器类型的武器
- 创建一个可以用作武器的药水
当然,所有这些动作都是可行的,但是当您执行这些动作时,您将不是最快乐的人,并且您可能会想:“是否有更好的解决方案来解决我想做的事情?”,在非关系数据库中设计一个更加灵活的模型。
注意:如果您不熟悉基于文档的数据库如何存储信息,请在继续之前检查此链接。下面介绍的模型旨在使用与前述文章中介绍的逻辑类似的逻辑。
db.itemTypes
name: Weapon
types: Sharp
name: Potion
types: HP, Mana
db.items
name: Short Sword
weapon
type: Sharp (db.itemTypes reference)
damage: 5
name: Healing Elixer
potion
type: HP (db.itemTypes reference)
modifier: 5
name: Mana Drainer
potion
type: Mana (db.itemTypes reference)
modifier: -5
name: Healing Potion Sword
potion
type: HP (db.itemTypes reference)
modifier: 10
weapon
type: Sharp (db.itemTypes reference)
damage: 15
关于NoSQL和SQL数据库的性能,有很多不错的文章,但是这里提供了一些应用程序示例,因此您可以执行自己的测试:MongoDB与SQL Server 2008 Performance Showdown
如何使用MongoDB确保用户之间的数据一致性?
MongoDB支持对单个数据实体(文档)进行读/写原子操作,因此来自MongoDB的查询结果应始终与数据库中存储的内容保持准确。
编辑:提供了NoSQL示例数据库的项目