ska*_*tek 6 erlang couchdb mnesia erlang-otp cap
我已经问了一个问题,关于一个简单的容错软实时网络比萨饼店交付应用.

我在那里得到了非常好的评论和答案,但我不同意这是一个真正的网络服务.它不仅仅是一种网络服务,它更像是一个实时系统来接受客户的订单,控制这些订单的调度并控制实时交付这些订单的车辆.
此外,与"真正的"网络服务不同,这个系统不是为了拥有许多用户 - 只有少数调度员(电话运营商)和一些将使用它的交付驱动程序(因为现在我没有要求提供直接访问)为实际客户提供服务;只有调度员和交付司机才能直接访问).
因此这个问题有点笼统.
我发现,为了做出正确的选择,为我所要做的这个应用程序的第一件事NoSQL数据存储选项之间做出选择CA,PA并CP根据CAP定理.
现在,使用Erlang构建Web应用程序的书称"虽然它[Mnesia]不是SQL数据库,但它是一个像SQL数据库一样的CA数据库.它不会处理网络分区".同一本书说CouchDB数据库是一个PA数据库.
考虑到这一点,我认为我需要对我的应用程序做的第一件事是确定"容错"术语对CAP的意义.
我的简单要求是使应用程序24/7(R1)可用.另一个是没有必要扩展,应用程序将拥有非常适量的用户(可能无法拥有数千个调度程序)(R2).
现在,R1是否要求应用程序提供一致性,可用性和分区容差以及具有哪些优先级?
什么类型的数据存储选项将更好地处理以下问题:
总结一下:什么样的数据存储(CA,PA或CP)将更好地适应上述系统?什么样的数据存储能更好地满足R1要求?
PA 解决方案是您最好的选择。我强烈推荐受 Amazon Dynamo 启发的解决方案。最著名的 dynamo 实现是 riak 和 couchdb。Riak 甚至允许您通过调整读写副本将 PA 更改为其他形式。