NoSQL实现(3)——Cassandra

  • 列族数据库

这一次使用的NoSQL数据库是Cassandra,它是一种列族数据库。与传通用数据库不同,列族数据库将数据存在列族中,一个列族中可以有多个列,一条记录可以有多个列族且用一个唯一的标识rowkey来表示。列族数据库的各行不一定要具备相同的列,可以在某一行中添加一个列而不把它加入其它行中。它与传统数据库的记录区别可以从以下两张图中看出来:

传统数据库,一行即为一个记录,每一条记录对应的列都相同

列族数据库,每一条记录可以有多个列族,且拥有的列可以不相同


  • Cassandra的配置

在Cassandra服务器的安装时,需要修改以下几个地方:

  1. data_file_directories:这是Cassandra数据存储的目录,可以将其修改到自己建立的data文件夹中。
  2. commitlog_directory :Cassandra提交日志文件夹,也可以将其修改。
  3. saved_caches_directory:Cassandra应保存计数器缓存,将缓存保存到设置的saved_caches_directory中

除此之外,因为在例子中写好了用户名和密码,因此需要将Cassandra服务器的验证方式修改为用户名+密码的验证方式,为此需要修改cassandra.yaml中的其它几个配置,让Cassandra使用用户名/密码验证:

  1.  authenticator :后端认证,用于标识用户,Cassandra提供了两种方法:AllowAllAuthenticator,PasswordAuthenticator。

    AllowAllAuthenticator:不执行任何检查 - 将其设置为禁用身份验证。 PasswordAuthenticator:依赖用户名/密码对来验证用户。如果使用了这个认证方式,那么还需要将role_manager设置为CassandraRoleManager。

     默认值为AllowAllAuthenticator,因为需要修改为用户名/密码验证所以将其修改为: 

    authenticator: org.apache.cassandra.auth.PasswordAuthenticator 复制代码
  2. authorizer:后端授权,用于限制访问/提供权限,Cassandra提供了两种类型:AllowAllAuthorizer,CassandraAuthorizer。

    AllowAllAuthorizer:允许任何用户的任何操作。
    CassandraAuthorizer :通过授权决定登录之后用户具有哪些权限

    默认值为AllowAllAuthorizer,这里可以将其改成

    authorizer: org.apache.cassandra.auth.CassandraAuthorizer复制代码
  3. role_manager:部分认证和授权后端,用于维护角色之间的授权和成员资格。Cassandra只提供了CassandraRoleManager,它将角色信息存储在system_auth中。

  • 实例
  1. 先在application.properties里对连接Cassandra服务器进行配置:
    #连接节点
    spring.data.cassandra.contact-points=127.0.0.1
    #键值空间
    spring.data.cassandra.keyspace-name=test
    spring.data.cassandra.port=9042
    spring.data.cassandra.username=test
    spring.data.cassandra.password=test复制代码
  2. 定义一个实体类,并加上@Table的注解,让其成为对应的表
    @Table(value = "user")
    public class User implements Serializable {
        @PrimaryKey
        private String id;
        @Column(value = "name")
        private String name;
        @Column(value = "age")
        private int age;
    
        public User(String id,String name,int age){
            this.id = id;
            this.name = name;
            this.age = age;
    
        }
       ……
    }复制代码
    与MongoDB不同,在标识主键的时候,Cassandra使用的注解是@PrimaryKey而不是@Id
  3. 编写一个UserRepository接口,让它继承CassandraRepository并自定义一个操作:
    @Repository
    public interface UserRepository extends CassandraRepository<User,String> {
        User findUserById(String id);
    }复制代码
  4. 编写一个Service,将UserRepository注入并运用其自带的一些操作完成增删改查的功能。
    @Service
    public class UserService {
        @Autowired
       UserRepository repository;
    
    
        public void add(User u){
            repository.insert(u);
            System.out.println("INSERT SUCCESS");
        }
      ……
    }复制代码


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Cassandra是一个混合型的非关系的数据库,类似于Google的BigTable。其主要功能比Dynomite(分布式的Key-Value存储系统)更丰富,但支持度却不如文档存储MongoDB(介于关系数据库和非关系数据库之间的开源产品,是非关系数据库当中功能最丰富,最像关系数据库的。支持的数据结构非常松散,是类似json的bjson格式,因此可以存储比较复杂的数据类型。)Cassandra最初由Facebook开发,后转变成了开源项目。它是一个网络社交云计算方面理想的数据库。以Amazon专有的完全分布式的Dynamo为基础,结合了Google BigTable基于列族(Column Family)的数据模型。P2P去中心化的存储。很多方面都可以称之为Dynamo 2.0。 功能   Cassandra的主要特点就是它不是一个数据库,而是由一堆数据库节点共同构成的一个分布式网络服务,对Cassandra 的一个写操作,会被复制到其他节点上去,对Cassandra的读操作,也会被路由到某个节点上面去读取。对于一个Cassandra群集来说,扩展性能是比较简单的事情,只管在群集里面添加节点就可以了。   这里有很多理由来选择Cassandra用于您的网站。和其他数据库比较,有三个突出特点: 模式灵活 :使用Cassandra,像文档存储,你不必提前解决记录中的字段。你可以在系统运行时随意的添加或移除字段。这是一个惊人的效率提升,特别是在大型部署上。 真正的可扩展性 :Cassandra是纯粹意义上的水平扩展。为给集群添加更多容量,可以指向另一台电脑。你不必重启任何进程,改变应用查询,或手动迁移任何数据。 多数据中心识别 :你可以调整你的节点布局来避免某一个数据中心起火,一个备用的数据中心将至少有每条记录的完全复制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值