论文之前谈到,REST式的应用,核心操作就是GET, POST, PUT, DELETE, Jersey使用@PATH注解匹配URI,使用@Consumes注解匹配服务器接受客户端发送的数据类型,使用@Produces注解匹配服务器返回的数据类型,并且提供了一组注解@GET,@POST,@PUT,@DELETE对应四种操作,这些注解的搭配使得定义资源更加方便。其他更加深入的内容可以参考推荐的书籍《Java Restful Web Service》。
2。2。4 Cassandra数据库
对于该系统的数据库,选择用Cassandra[4](NoSql数据库的一种),为什么选用它,我先介绍一下它的特性。
⑴ Cassandra基本特性
Cassandra是一个开源的分布式数据库,与传统的关系型数据库是完全不一样的。Cassandra是分布式的,所以它可以在多台机器上运行,但呈现给用户的是一个整体,无须关心它运行在几个结点上,当然运行在一个结点上的Cassandra是没有意义的。
很多数据库(如MYSQL),当你需要扩展它的时候,你需要设立一个主结点,其他作为从结点,但是Cassandra是无中心设计的,也就是说Cassandra的每一个结点都是等同的,这非常方便扩展,无中心架构也意味着Cassandra不会有单点故障(集群中有一台服务器宕机,整个服务不可用)。
Cassandra数据库也是高可用的,你可以在不中断系统服务的情况下,替换故障结点,还可以把数据分散到不同的数据中心,提供更好的本地访问性能。
Cassandra还有一个重要的特性,就是可调一致性,说到一致性问题,我们知道,是为了保证所有的读操作返回的都是最新的结果。分布式数据库都是有副本的,为了实现一致性,所有写操作必须阻塞,直到所有副本响应。然后Cassandra并不是这样的,他的一致性是可调节的,由客户端决定。你可以通过副本因子来设置一致性级别,决定牺牲多少性能来换取一致性。比如,副本因子是3,你在客户端写操作时设置一致性级别为大于一半,那么当2个结点响应正确,操作就成功了,你在客户端读操作时设置一致性级别为1,那么只要一个结点响应正确,操作就成功了,这样性能就大大提高了。来`自+优-尔^论:文,网www.youerw.com +QQ752018766-
Cassandra是为大量的写操作而优化的,在运用它的时候得考虑你的系统场景。Cassandra更适合那些写操作大于读操作的场景,甚至伴有突发高峰的应用,支持大量的客户端并发写操作。分布式支付集成系统就是很适合的场景,客户端会有大量的写操作,因为发起支付,发起退款,这些都是写操作,成功的订单,退款单,较少会有查询操作。
⑵ Cassandra数据模型
Cassandra的数据模型是一个全新的定义,Cassandra是基于列存贮的。Cassandra包含keyspace,类似关系数据库中的database,keyspace中通常包含多个column family,类似于关系数据库的table,column family是集合了很多行的容器,每一行都有一个行健key标识,每一行包含若干column(列的数量可以相同也可以不同)。Cassandra是无schema的,尽管定义了column family,但没定义column,所以一行中可以任意添加column。只需在keyspace中定义好column family后就可以开始写数据了,column的名字是客户端临时决定的,非常灵活。如图2-1,是一个column family中两行数据