我应该使用数据库存储游戏内容吗?[关闭]


16

我有一个使用SFML用C ++编写的2D游戏。我想使游戏具有可扩展性,可以通过在文件或数据库中添加行/条目/行来轻松添加诸如项目或实体之类的内容。

我正在寻找不需要编译到程序中的东西,而是可以在运行时读取和写入的东西。什么时候使用数据库合适?


1
请进一步说明您的需求。数据库非常快,但是非常复杂。您真的需要速度吗?为什么不只使用文本文件?您运行基准测试了吗?
Anko 2015年

你要有几件?超过一百万吗?这大约是我考虑在文本文件上使用数据库的阈值。
菲利普

我想说一个数据库对于此而言是过大的,仅使用某种定义列表即可。也许只是纯文本。考虑XML或JSON。
雨果·辛克

1
我也建议使用XML或JSON。我更喜欢XML,因为对人类而言,它对我而言更具可读性,但是JSON也是一个不错的选择。
Draco18s不再信任SE 2015年

我不会声称对数据系统或如何在游戏中实现有足够的了解,但是我会说微软倾向于将微数据库实现用于许多简单的应用程序(那些没有很多应用程序的应用程序)。数据或外部数据库需求,但往往具有“关系”等)。只要您牢记易用性,它就很有意义。(坏主意:使用超形式化的XML名称空间来强制数据正确性)
Katana314 2015年

Answers:


26

仅在需要数据库时才使用数据库。那是:

  • 如果您需要经常执行复杂的查询。
  • 如果您具有复杂的数据关系。
  • 如果您的数据量巨大并且不太可能容纳在内存中。

如果您的游戏数据满足以下任何条件,则可以从使用数据库中受益。请注意,这些都不是很常见的,你可能符合其中任何一个。如果这样做,我会使用SQLite或类似的想法,即不需要正在运行的服务器而只是一个库。

否则,请在启动时使用文件并将数据加载到内存中。如果您希望游戏可修改,请从游戏目录和mods目录中加载此数据,并定义如何合并冲突的信息。

还要注意的是,如果您确实使用数据库,则只有在游戏加载时,您和mods的开发人员仍然可以使用文件读取初始数据并构造数据库,这可能对您和受益。除非该数据库的潜在大小很大(即,几十个MiB),否则您可能要使用内存数据库,这在SQLite中可以通过指定:memory:为数据库路径来实现


3
SQLite即使您的需求不是“复杂的”或“巨大的”,我也要考虑第二点。实际上,有很多原因使您可以在唾手可得的数据库中受益匪浅,因为这些东西很小且内嵌于其中。
wjl

另外,移动平台使用数据库来存储一些信息。Android使用SQLite。这意味着您在移动平台方面的大部分工作已经完成(就数据处理而言)。而且,设置SQLite和编辑SQLite数据(使用类似SQLite Studio或类似程序的程序)真的很容易。如果要使用SQLite,最好的选择是使用V3。但是除此之外,还可以!
Ismael Miguel 2015年

@wjl:同意,即使对于较小的游戏数据集,标准化和参照完整性约束的好处也值得。(现在,只要让SQLite进行适当的参照完整性约束就不那么麻烦了……)
Mason Wheeler 2015年

这是反对使用关系数据库的观点。一个简单的索引键值存储可能仍然值得。
2015年

1
@Mark如果您要在游戏中使用键值存储,则可能还需要在内存中具有哈希图或类似的东西。
Darkhogg 2015年

5

我真的很喜欢将MongoDB用于游戏开发,它具有非常好的性能,并且非常灵活,易于使用且基于json。

您可以在任何集合中添加所需的任何字段,因为它是NoSQL Arch,因此它非常适合任何“动态”环境(例如游戏)。

给它一个偷看

如果您正在开发某种基于MMO回合的策略游戏,可能您应该阅读有关CouchDB的信息,它是一个NoSQL数据库,具有非常好的版本控制系统。


不好回答。问题不是“我应该使用哪个数据库”,而是“我应该完全使用数据库”。
uliwitness,2016年

1

CastleDB是一个不错的选择,因为它只是一个编辑器,之后可以将数据库转换为JSON文件。我看到很多答案都说纯文本文件是最好的,所以CastleDB可能是两全其美的。


答案还不错,但是错过了问题。问题不是“我应该使用哪个数据库”,而是“我应该完全使用数据库”。
uliwitness '16
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.