<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hello,<div><br></div><div><div><div>On Sep 13, 2013, at 12:59 PM, Jesper Louis Andersen <<a href="mailto:jesper.louis.andersen@erlang-solutions.com">jesper.louis.andersen@erlang-solutions.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><span style="font-family: 'Source Code Pro'; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; display: inline !important; float: none; ">In Erlang, you have options. Safety is had due to isolation, so you don't have to push data onto stable storage as often. And you can quickly communicate in the same memory space between processes, so you don't need a mediating DB layer.</span></blockquote></div><br></div><div>This is precisely true… However, if we are talking about MMO gaming I see one potential issue which requires some clarification. Often, the data availability is important. Player would not forgive you if they "almost" win the battle but they status rolled back due to server crash or other failure that impact your "live" data. </div><div><br></div><div>What would be possibilities to achive desired HA for transient data in Erlang and recover node failures. HA is required for millions of processes (e.g. process per user, process per ship, etc). </div><div><br></div><div> * Keep copies of same data on two distinct nodes. Basically you spawn two "ship" management processes on node A and B. However, you as app developer is responsible to implement state conflict resolution, rollback, recovery, etc. </div><div><br></div><div> * Use Mnesia, Riak as HA transient storage but this does not differ for my taste as any other mediating DB layer at some respect. </div><div> </div><div> * Use external DB layer but make asynchronous checkpoint of process status </div><div><br></div><div>Did I miss something?</div><div><br></div><div>Best Regards, </div><div>Dmitry</div></body></html>