我的目标是创建一个浏览器游戏,玩家可以在其中设置建筑物。
每栋建筑都有几个模块(发动机、办公室、生产线……)。每个模块最终都会运行一个或多个动作,例如使用成分 Y、Z 创建 2OO 个“项目 X”。
游戏服务器将使用 erlang 设置:一个 OTP 应用程序作为服务器本身,氮气作为 Web 前端。我需要数据的持久性。我在考虑以下问题:
当某人或某物与建筑物交互时,或者代表某个生产线的计时器结束时,主管会生成一个 gen_server(如果尚未生成),它从数据库加载建筑物的状态,因此 gen_server 可以回答诸如“添加这个模块','开始这个动作','把这个产品存储到仓库','模具'等(
但是当一个建筑物在 X 秒或几分钟内没有收到任何消息时,他将终止(感谢 gen_server 超时功能)并将其当前状态返回到数据库。
因此,由于它将是一个(软)实时游戏,因此必须非常快速地设置 gen_server。我将 membase 视为数据库,因为众所周知它具有非常好的响应时间。
我的问题是:当一个 gen 服务器启动时,他的状态会填满一些内存,而且这个状态也存在于 membase 处理的内存中,所以这个状态在内存中使用了他的两倍大小。这是一个糟糕的设计吗?
在我的情况下,membase 是处理持久性的好方法吗?使用 mnesia 是一个更好的选择,还是别的什么?
我担心 mnesia 2 Go(或 4?)表大小限制,因为我目前不知道我的 gen_servers 的平均状态大小(本例中的建筑物,还有玩家,生产线等),我可能有一天会超过1 名球员 :)
谢谢