我正在为我的网页游戏编写一个C#HTTP请求服务器,我正在使用MongoDB作为数据库。在C#应用程序中仍然可以缓存任何内容是否更有效?或者只是为MongoDB做一件事要求更快。我期望每个活跃玩家每分钟有大约十二个选择查询,每分钟可能有一两个保存/更新查询。
答案 0 :(得分:6)
“每个活跃玩家每分钟打十几个选择查询”并没有告诉我们任何事情。为了实现这一点,我们需要知道活动播放器的数量,每个查询所花费的时间,表结构,使用中的查询(包括返回的数据量),服务器负载的统计数据等等。至于你是否使用Mongo的能力来分割数据库等等。
无论如何,在设置任何类型的缓存之前,我强烈建议您从剖析系统开始。你需要知道你的瓶颈在哪里,如果有的话。这不是你想象的,你需要硬性和真实的统计数据。
掌握了这些信息后,您可以确定是否需要
重点是,不要开始缓存内容,希望以后能够提高性能。缓存可能会提高性能,因为它会根据大量因素将其杀死。
另外还要添加一些内容。如果您使用Web场托管请求服务器,则本地缓存数据到每个独立Web服务器所涉及的复杂性和硬件成本会急剧增加。
当尝试将数据缓存在这些计算机的内存中时,由于Web服务器上的内存需求增加,硬件成本会上升。
当尝试使缓存的副本保持同步以使它们不会变得陈旧时,复杂性会增加。我认为游戏会需要 100%当前的信息。像facebook和其他网站可以有点不同步。当游戏服务器不同步时,它可能会对玩家的可用性产生负面影响。
假设您当前仅部署到单个Web服务器和单个数据库服务器,那么在您迁移到多个Web服务器时,添加缓存功能现在可能会给您带来巨大的痛苦/或多个数据库服务器。
最后,如果由于某种原因,您只部署到同时托管数据库和Web服务器的单个计算机,那么缓存完全是荒谬的。
答案 1 :(得分:0)
我会说无论数据库如何,缓存很少更改服务器上的数据比制作一堆数据库调用更好。任何可以直接通过网络从Web服务器进行数据库调用然后通过线路发送的东西都是一件好事。如果您正在返回相同数据的十几个选择查询,则最好对其进行缓存。
答案 2 :(得分:0)
这是需要考虑的事项:当你的游戏很小时,你的数据库可能会在同一台机器上,而数据库本身也会自己进行缓存。如果你的游戏很受欢迎,你最终会得到多个网络服务器,如果要提高整体内存效率,最好使用像memcached这样的分布式缓存。