我正在尝试构建一个高度可用的超大量购物车应用程序.该应用程序将有一个如此之高的卷,我正在考虑使用cassandra而不是mysql的数据库.
现在,在购物车系统中,大多数数据库操作必须100%一致,而其他操作系统则不一定.
100%一致操作示例:保存付款确认.保存购买的物品清单.
不需要100%一致操作的事项示例:保存客户的地址(如果在付款时,数据库中没有保存地址,则认为它已丢失并再次询问客户).其他类似的事情.
现在,如果我在同一区域(Amazon EC2)中运行服务器群集,是否存在执行所有事务的主要障碍,即最大一致性事务.这会提供与mySQl Relational数据库相同的可靠性.请记住,我们在这里处理金融交易.
我的数据在cassandra中通常是"安全的".我的意思是完全意外的电源故障,随机光盘故障等等.
具体到你关于可用性和EC2的问题......正如西奥多写的那样,Cassandra的一致性水平将决定数据的"安全性".您将面临的问题是如何确保数据到达Cassandra,实现您的交易目标并得到适当保存.
在Apache Cassandra用户的邮件列表中有一些关于事务和解决这个问题的好线程.
Cassandra自己不适合交易:
要解决这个问题,您需要"一些"可以利用Cassandra作为管理数据层之上的事务的数据存储.
总结......您无法保证单独使用Cassandra进行金融交易
有很多不同的方法来定义一致性。如果“最大一致事务”是指在 ConsistencyLevel ALL 上读取和写入,那么这将提供一致性,即您的读取永远不会返回过时的值,并且提供持久性,即您的写入将存储在返回之前的所有节点。
然而,这与交易不同。Cassandra 不支持事务。它不像 MySQL 那样提供不同行之间的一致性。例如,假设您将商品添加到购物篮,并更新购物车中的总成本。每个操作都将单独、一致且持久地存储。但是,可能有一段时间您可以看到其中一项更改,但看不到另一项更改。在关系数据库中,您可以将它们分组到一个事务中,这样您只能看到两者,或两者都看不到。
就安全性而言,Cassandra 在执行其他操作之前会将所有对磁盘的写入存储在提交日志中,这与关系数据库使用事务日志的方式相同。因此,对于系统崩溃而言,它同样安全。对于节点故障,如果你写在CL.ALL上,那么只要每个副本集中有一个节点存活,你就永远不会丢失数据。至于磁盘故障,这与您的底层硬件设置有关,例如 RAID。
| 归档时间: |
|
| 查看次数: |
3760 次 |
| 最近记录: |