【问题标题】:Typed Datasets or Entity Framework for an online game server? [closed]用于在线游戏服务器的类型化数据集或实体框架? [关闭]
【发布时间】:2013-05-15 18:46:42
【问题描述】:

我的游戏是回合制的,但它确实有一些实时元素,比如聊天,所以它需要速度。理想情况下,一台服务器应该支持几千个在线玩家。

我知道数据集倾向于将大量数据存储在内存中,但我认为这就是我需要避免每毫秒执行两次 db 调用所需要的。我正在远离 Entity Framework,因为我似乎对引擎盖下发生的事情没有太多控制权,而且不知何故它让我觉得效率较低。

现在我知道这些(也不是一般的 c#)都不是生活中存在的最快速的解决方案,但我确实需要一点便利。

顺便说一句,由于其他一些不确定的依赖关系,我不能轻易使用 .Net 4.0。这些可以修复,但老实说,我不想花时间解决这个问题。我宁愿坚持使用 3.5,我的依赖项可以很好地使用。

【问题讨论】:

  • 如果性能受到关注,请远离 EF。只需将 ADO.Net 与您自己的 SQL / 存储过程一起使用。
  • 您是否尝试将类型化数据集用作内存缓存以避免一直访问数据库?
  • 是的@Tombala,这正是我正在做的事情。
  • @dbaseman 但如果我对使用实体框架或类型化数据集很执着,你会强烈支持数据集吗?
  • @user1379635 真的取决于。数据集有多大?大多数数据库交互是读取(您可以缓存),还是有很多写入?这个问题(恕我直言)需要更具体/充实才能得到一个好的答案。

标签: c# entity-framework strongly-typed-dataset


【解决方案1】:

我用数据库后端做了一个游戏。

智者的话:在实时游戏中更新缓存很困难。您的玩家将一直在互动。您必须考虑是否要将所有玩家保持在同一服务器上 - 如果是这样,缓存很简单,但您会限制增长。如果没有,请考虑如何让人们在同一台服务器上进行交互。例如,聊天服务器将解决聊天问题。但是,如果您有地理,您可能希望按世界区域进行细分,如果没有,可能希望保留玩家组,或者如果您有不同的游戏实例,则可以按此进行细分。

另一个问题是锁定 - 您的玩家可能会访问其他人正在更新的相同数据。您几乎可以肯定必须处理事务隔离级别 - i。 e.未提交的读取将有助于锁定。为此,ADO 提供了更多控制。

不过 EF 让你编写更简洁的更新代码,如果你是按 ID 更新,性能不会有什么不同。

您可以混合使用 - 通过 ADO 读取并通过 EF 写入。您甚至可以编写一个在下面使用 ADO 的事务性数据库上下文。这样他们看起来很相似,但在后台做不同的事情。

只是我的想法,我希望这可以帮助您找出解决方案。

【讨论】:

    【解决方案2】:

    如果您唯一的问题是聊天,您可以为它选择不同类型的解决方案,使用提供消息传递和广播的外部云系统...

    查看此链接: http://www.pubnub.com/solutions/how-pubnub-works

    希望我能以某种方式提供帮助

    【讨论】:

    • 这看起来很酷,但我宁愿不要太参加第三派对。
    【解决方案3】:

    听起来这两种解决方案都不适合解决您的问题。因此,您的问题就像是在询问是否使用湿报纸或雨伞将钉子钉入墙上。无论答案如何,您可能都不应该这样做。

    EF 有很多限制和怪癖,并且确实有一些开销。如果您真的想坚持使用 3.5(我认为这是个糟糕的选择,但是嘿),那么我不会推荐它 - 除非您已经对它感到满意,包括如何解决任何性能问题。

    DataSet 只是一个可憎的东西。我的专业信念是,它们的发明是为了让微软能够为 Visual Studio 提取 5 分钟的拖放编码演示,以说服所有 VB 程序员切换到 .NET。与几乎所有东西相比,它们都异常缓慢(尽管由于 .NET 2.0 的性能至少可以线性扩展)。

    我不确定您应该使用什么产品,但我知道内存中的关系数据库允许您存储事务日志和偶尔的快照,以便在您的服务器死机(或 IIS重新启动等),它以可伸缩性为代价为您提供性能(您的整个数据库必须适合内存)。

    另一种选择是使用 NoSQL 数据库(例如 MongoDB),它可以很好地跨多个服务器进行扩展,并允许您将所有相关数据捆绑到一个文档中(这样您就不必承担连接表时的所有开销)查询数据)。

    这些选项中的任何一个都将比两个原始建议中的任何一个更合适。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-08
      • 2010-10-12
      • 2017-08-08
      • 2011-07-28
      • 1970-01-01
      • 2014-05-28
      • 2011-06-13
      • 1970-01-01
      相关资源
      最近更新 更多