使用什么数据库?

时间:2010-09-12 02:31:40

标签: java sql database nosql

我是数据库的新手,但我认为我最终会遇到平面文件不起作用的情况。

我正在编写一个程序来分析多人游戏的结果,其中每个游戏可以将任意数量的玩家分组到任意数量的团队中。我希望允许玩家在游戏中获胜,打平或离开(并根据团队表现获胜/失败)。

我也可能希望存储历史玩家评分(除非从他们的游戏历史记录中重新计算得更快),所以我不知道这是否意味着将每个玩家的评分与每个游戏一起存储,或者有一个单独的表格每个球员,或者是什么。

5 个答案:

答案 0 :(得分:7)

我没有看到任何影响数据库选择的标准,但我会列出免费的标准:

我不推荐像SQLite这样的嵌入式数据库,因为嵌入式数据库在功能上进行权衡以适应空间和空间。尺寸问题。我不同意他们的信念,即数据打字应该放宽 - 这导致了很多关于即将处理日期/时间过滤等问题的问题......

您需要了解规范化,将数据转换为第三范式(3NF),因为它强制实施参照完整性,这也最大限度地减少了数据冗余。例如,您的玩家统计数据不会存储在数据库中 - 它们会在请求时根据数据进行计算。

答案 1 :(得分:3)

您没有提到需要锁定机制,其中多个用户可能同时竞争将相同数据写入同一资源(平面文件中的数据库记录或文件)。我建议的是获得一本关于数据库设计的好书并尝试深入理解规范化规则。在不同的表中分发数据会对性能产生影响,但它们也会影响查询构造的易用性。这是一个非常复杂的话题,并没有简单的答案。这就是为什么公司聘请数据库管理员来保持数据结构优化的原因。

如果您需要轻量级数据库引擎,可能需要查看SQLite

答案 2 :(得分:3)

已经提到了一些好的选项,但我真的认为在Java平台上,H2是一个非常好的选择。它非常适合测试(内存测试数据库),但对于嵌入式用例和独立的“真实数据库”也非常有效。另外,它很容易导出为转储文件,从中导入,移动。并且也有效地工作。 它是由一个非常优秀的Java DB人员开发的,并不是他的第一次采访,你可以从项目的成熟度看到这一点。除此之外,它仍然在积极开发和支持。

答案 3 :(得分:1)

关于为什么在您将其用作标记时,没有人提到任何“NoSQL”数据库的说法:

非SQL数据库最近引起了很多关注(甚至是彻底的炒作),因为它们是一些高调的用例,因为它们是新的(因此很有趣),并且因为它们具有令人难以置信的可扩展性(即“性感”给程序员)。但是,只有极少数非常大的玩家才真正需要这种可扩展性 - 而你肯定不需要。

另一个因素是SQL数据库要求您事先定义数据库模式(表和列的结构),并且更改它有些问题(特别是如果您已经拥有一个非常大的数据库)。非SQL数据库在这方面更灵活,但是您需要使用更复杂的代码来支付它(例如,在引入新字段之后,您的代码需要能够处理尚未存在的元素)。听起来你不需要这种灵活性。

答案 4 :(得分:0)

另请尝试OrientDB。它是免费的(Apache 2许可证),无处不在,支持SQL,而且速度非常快。可以在普通的hw中在6秒内插入1,000,000条记录。