2

我们都知道MMO游戏的流行趋势。玩家面对面的地方。然而,在游戏过程中,有大量的 SQL 插入和查询,如下所示

  • 每 12 分钟或 500 名玩家/小时平均/最少 100 场在线锦标赛
  • 在游戏进度表中,我们正在存储每个玩家的移动
    • 12轮4人锦标赛可有48条记录
    • 加上大约相同数量的法术或特殊物品
    • 每场比赛总共 96 个或每小时 48000 个记录插入(500 名玩家/小时)

针对我之前的问题(提高 MMO 游戏性能),我更改了架构并且我们没有直接写入数据库。

而是在 a 中累积所有值DataTable。然后,只要DataTable有超过 100k 行(有时甚至可能在一小时内),该过程就会以 csv 格式写入文本文件。另一个后台应用程序经常扫描文件夹中的 CSV 文件,读取任何可用的 CSV 文件并将信息存储到服务器数据库中。

问题

  1. 我们是否可以直接从另一个应用程序访问游戏应用程序中存在的数据表(它读取数据表并清除已读取的记录)。这样就代替了从磁盘写入和读取,我们直接从内存中读取和写入。

  2. 有没有比 DataTable 更快的方法,它可以保存大数据,但在排序和更新操作中相当快。因为我们必须经常扫描用户 ID,更新游戏状态(几乎在每次插入时)。它可以是缓存实用程序或快速扫描/搜索算法甚至是 CollectionModel。现在,我们使用 foreach 循环遍历 a 中的所有记录并在DataTable用户存在时更新行。如果没有,那么我们创建一个新行。我尝试使用SortedList和类,但它不仅使工作量加倍,内存使用量的增加也大大降低了整体游戏性能。

谢谢

阿文德

4

2 回答 2

1

使用 memcache 会提高你的性能

于 2012-10-14T19:00:11.470 回答
1

好吧,让我们回答:

  1. 可以使用 Remoting 在应用程序之间共享对象 - 但速度要慢得多,并且会使代码的可读性降低。但是,您有另一种解决方案,因此您将继续使用内存。您可以使用 MemoryMappedFiles,因此所有工作实际上都将使用内存而不是磁盘:http: //msdn.microsoft.com/en-us/library/dd997372.aspx

  2. 你可以使用某种类型的 NoSQL DB(有很多:Redis、MongoDB、RavenDB)——所有这些都基于键值访问,你应该测试它们的性能。更好的是,其中一些数据库是持久的,可以与多个服务器一起使用。

希望这可以帮助。

于 2012-10-13T17:34:20.993 回答