nia*_*hoo 5 erlang persistence erlangweb membase
我的目标是创建一个玩家可以设置建筑物的浏览器游戏.
每栋建筑都有几个模块(发动机,办公室,生产线......).每个模块将一直运行一个或多个动作,例如用成分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名球员:)
谢谢
我同意 Hynek-Pichi-Vychodil 的观点。Riak 对于键值存储来说是一个很棒的东西。
我们几乎 95% 都使用 Riak 来完成您所描述的同样的事情。到目前为止一切正常,没有任何问题。如果您遇到 Riak 的性能限制 - 添加更多节点就可以了!
Riak 的另一个很酷的事情是它随着时间的推移性能下降非常低。您可以在此处找到有关 Riak 基准测试的更多信息:http://joyeur.com/2010/10/31/riak-smartmachine-benchmark-the-technical-details/
如果你同意的话:
关于membase和内存使用:我也尝试过membase,但我发现它不适合我的任务 - (membase声明容错,但我无法以它应该处理错误的方式设置它,即使有membase人员的帮助我没有成功)。因此,目前我使用以下架构:所有在线并玩游戏的玩家都呈现为玩家进程(gen_server)。每个玩家的所有数据和业务逻辑都在其玩家进程中。有时,每个参与者进程都会决定将其状态保存在 riak 中。
到目前为止似乎是非常快速有效的方法。
更新:现在我们使用 PostgreSQL。太棒了!
| 归档时间: |
|
| 查看次数: |
405 次 |
| 最近记录: |