假设我想建立一个游戏网站,我有很多游戏部分。它们都有很多需要存储的数据。使用表示每个游戏的表创建一个数据库还是让数据库代表游戏的每个部分是否更好?我非常期待一种“依赖”的答案。
答案 0 :(得分:17)
管理5个不同的数据库将是一个令人头疼的问题。我建议使用一个包含5个不同表的数据库。除了其他任何事情,我不会惊讶地发现你在5之间有一些共同的信息 - 例如用户身份。
请注意,您对“大量数据”的想法可能与数据库的数据不同......数据库通常用于处理巨大的数据集。
答案 1 :(得分:10)
取决于
开玩笑吧。如果这是一个项目并且数据彼此之间有任何关联,那么我总是会选择一个数据库而没有特定且令人信服的理由。为什么?因为我永远不记得自己想“男孩,我确定希望更难看到这些信息。”答案 2 :(得分:3)
虽然你的问题中没有足够的信息来给出一个好的答案,但我会说,除非你预见同一个用户(或查询)同时需要两个游戏的数据,否则没有理由组合数据库
对于任何常见的事情,您可能应该有一个数据库,然后为任何唯一的事物创建独立的数据库。像代码一样,数据库往往最终会针对不同的应用程序在不同的方向上发展。将它们保持在一起可能会导致你破坏事物或在你的变化中更加保守。
此外,某些数据库在数据库级别而不是表级别进行优化,管理和备份。由于它们可能具有不同的性能特征和使用配置文件,因此单一尺寸适合所有解决方案可能无法扩展。
如果您使用ORM框架,您可以免费访问多个数据库(几乎),同时仍然可以避免代码复制。因此,除非您有联合查询,否则我认为支付共享数据库的风险是不值得的。
当然,如果你付钱给别人来托管你的数据库,那么使用一个数据库可能会更便宜,但这确实是一个商业问题,而不是软件。
如果您确实选择使用单个数据库,请帮自己一个忙,并确保每个游戏的代码只知道特定的表。这将使您更容易以后维护或分离到多个数据库。
答案 3 :(得分:1)
如果不同的游戏不共享任何数据,则使用单独的数据库是有意义的。另一方面,如果游戏数据的结构相同,则使用一个数据库是有意义的 - 否则你必须分别在每个游戏数据库中进行更改。
更新:如果有疑问,您应该始终使用一个数据库,因为在大多数情况下管理起来更容易。如果您确定应用程序是完全独立的并且具有完全不同的结构,那么您应该使用更多数据库。唯一真正的优势是更清晰。
答案 4 :(得分:1)
一个数据库。
您合理地想要存储的大多数东西都是文本或原始数据类型,如整数。你可能想把你的二进制内容扔进blob,但是当web服务器通过HTTP免费提供文件时,这在媒体密集的网站上是一个疯狂的计划。
我在主要游戏发行商的网站上取消了主要编程职责。我们用三种欧洲语言设法覆盖了他们当前和以前的大部分内容。
尽管每个标题都充满了视频和图像资源,但我们从未考虑过多个数据库来存储所有这些内容。
我无法想象为什么多数据库配置可以满足您的需求,无论是在开发中还是在开发之外。您必须提取的同步数量和错误容量是巨大的。试图从所有这些中提取与所有这些相关的数据将是一场噩梦。
您迁移的每个站点范围的更新都将 n 次,因为它很难且容易出错,其中n是您最终需要的数据库数量。
说真的,一个数据库 - 这与你预期的相差甚远,取决于答案。
答案 5 :(得分:1)
一般来说,“每个应用程序一个数据库”往往是一个很好的经验法则。
如果您正在构建一个包含许多部分的网站来讨论不同的游戏(或不同类型的游戏),那么这就是一个应用程序,因此一个数据库可能就要走了。我不是肯定的,但我认为这可能是你所要求的情况。
另一方面,如果您的“一个站点”是针对五个不同游戏的集合的battle.net类型匹配服务,那么该站点本身就是一个应用程序,并且五个游戏中的每一个都是单独的应用程序,所以你可能想要六个数据库,因为你总共有六个很大程度上独立的应用程序。不过,我的印象是,这不是你要问的情况。
答案 6 :(得分:0)
只是添加一点。当你在一个游戏中拥有数百万玩家并且你的游戏是实时的并且你有数万个同时在线的玩家时你必须至少在数据库中保留一些基本数据(比如玩家的虚拟数据)钱)。然后,您将希望将表分离为独立的DB,即使它们都是“连接”的。
这取决于。无论你试图做什么来避免痛苦,缩放都会很痛苦。但是如果你真的期待很多玩家和更新以及数据,我会建议两次,三次以上,然后再决定“一个数据库为多个项目”的解决方案。
是的,可能很难管理几个DB。但无论如何你都必须这样做。
答案 7 :(得分:0)
安全模型 如果每个游戏都有一组特定于该游戏的不同权限/角色,请将其拆分。
查询效果/复杂性
如果您需要频繁查询游戏之间的数据,我建议将它们保存在单个数据库中。
<强>可扩展性强> 另一个考虑因素是您的可扩展性计划如果游戏非常受欢迎,您可能希望为每个游戏购买单独的数据库硬件。从一开始就将它们分成不同的数据库会使这更容易。
数据大小
数据的大小不应成为决定的一个因素。
答案 8 :(得分:0)
我工作过的一个地方有很多数据库,一个用于所有客户端使用的东西,另一个用于客户端定制的客户端。最终发生的事情是,由于客户要求进行更改,他们最终会在客户端数据库中而不是共同点,因此有27种方法可以完成同样的事情,因为没有从客户端特定的重构到“嘿这个是其他客户需要做的事情“所以让我们把它放在一起。因此,一个数据库往往会减少重新发明轮子。
答案 9 :(得分:0)
明确地说,一个数据库
答案 10 :(得分:0)
请记住,特别是在网站上。如果您有多个数据库,则通常会失去查询缓存和连接池的性能优势。坚持一个。
答案 11 :(得分:0)
我可以在类似的情况下传递我的经验。
我们有4个“通用”数据库和大约30个“特定”数据库,这些数据库因相同的空间问题而分开。缺点是空间问题只是将dBase的缺点投射到SQL Server上。我们最终得到了SQL Server Enterprise上所有这些数据库,这些数据库远低于Desktop Edition允许的最大大小。
从关注点分离的数据库角度来看,4个公共数据库可能已经是2. 30个特定数据库可能已经是3个(甚至1个具有足够的操作/概括)。它是低效的代码(存储过程和数据访问层代码)和表格模式,它们决定了众多的数据库;最后,它与空间毫无关系。
我会尽早巩固并保持你的设计和安全;实施足够灵活,可在必要时提取组件。简而言之,计划几个数据库,但实现为一个。
答案 12 :(得分:0)
您要创建的数据库数量不取决于您的游戏数量,而取决于存储在数据库中的数据,或者更好的说,您如何在数据库之间交换这些数据。
如果数据库彼此不相关,那么它们当然是单独的数据库。
在我的一个项目中,我区分了内部和外部数据(存储在不同的数据库中)。
差异非常简单:
外部数据库仅存储您无法更改或撤消的事实。在我们的案例中,这是电话,SMS
消息和收款。
内部数据库存储了通常存储的内容:用户,密码等。
外部数据库仅使用自然的PRIMARY KEY
,即电话号码,银行交易 ID 等。
数据库具有完全不同的权利,它们之间的数据交换是导入和导出的问题,而不是关系。
这确保了实际数据不会发生任何变化:将付款重新链接到用户很容易,但如果付款丢失则很难恢复。
答案 13 :(得分:0)
您对“大量数据”的看法是什么?你需要在多个数据库中分割这个数据的唯一原因是,如果你试图用共享主机节省一些钱(即获得便宜的共享主机并将其分配到服务器上),或者你觉得每个数据库都在500GB +范围,无法访问适当的存储空间。
请注意,这两个原因都与架构无关,完全基于扩展期间的货币问题。
但是既然你还没有创建这个网站,那么你就把这辆车放在马前了。一个全新的站点不太可能在这个存储级别附近使用,所以只需创建1个数据库。
有些公司在1,000+ TB范围内拥有单一数据库......数据库大小基本没有上限。
答案 14 :(得分:0)
我不确定这是否正确,但我认为你想用5个表做一个数据库,因为(以及其他原因)备选对连接池的影响(例如,如果你使用的是ADO)。净)。在ADO.Net连接池中,连接由连接字符串键控,因此对于五个不同的数据库,最终可能会有20个连接到每个数据库而不是100个连接到一个数据库,这可能会影响连接分配的灵活性
如果有人知道更好或有其他信息,请在此处添加,因为我不确定我说的是否准确。
答案 15 :(得分:0)
如果您要为每个游戏存储相同的数据,使用1个数据库存储所有信息是有意义的。在不同的数据库中复制表结构是没有意义的,如果它们都存储相同的信息,那么为5个游戏创建5个表是没有意义的。
答案 16 :(得分:-1)
真的取决于:)..
问自己这些问题:
我可能想要考虑一下可恢复性(用户表)吗? 值得分离这些实体还是它们几乎相同? 这些实体中的任何一个是否共享特定事件/需求? 是否值得我花费时间和精力来构建5个不同的数据库系统(记住,如果你正在编写意味着不同连接字符串并提供更多安全性的游戏等)。
或者您可以创建一个数据库OnlineGames并拥有一个存储游戏名称和类别的表:
PacMan Arcade
塞尔达角色扮演
等等。
这实际上取决于你的意图......