五.数据库

mysql

MongoDB

MongoDB系统结构

  • 1.1 NoSQL 和 MongoDB
    • NoSQL=Not Only SQL,支持类似SQL的功能, 与Relational Database相辅相成。其性能较高,不使用SQL意味着没有结构化的存储要求(SQL为结构化的查询语句),没有约束之后架构更加灵活。
    • NoSQL数据库四大家族 列存储 Hbase,键值(Key-Value)存储 Redis,图像存储 Neo4j,文档存储MongoDB
    • MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中功能最丰富最像关系数据库的。在高负载的情况下,通过添加更多的节点,可以保证服务器性能。

MongoDB 体系结构

在这里插入图片描述

  • 1.1 MongoDB 和RDBMS(关系型数据库)对比
    在这里插入图片描述
  • 1.2 什么是BSON
    • BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON,它和JSON一样,支持内嵌的文档对象和数组对象,但是BSON有JSON没有的一些数据类型,如Date和Binary Data类型。BSON可以做为网络数据交换的一种存储形式,是一种schema-less的存储形式,它的优点是灵活性高,但它的缺点是空间利用率不是很理想。
    • {key:value,key2:value2} 这是一个BSON的例子,其中key是字符串类型,后面的value值,它的类型一般是字符串
      ,double,Array,ISODate等类型。BSON有三个特点:轻量性、可遍历性、高效性
  • 1.3 BSON在MongoDB中的使用
    • MongoDB使用了BSON这种结构来存储数据和网络数据交换。把这种格式转化成一文档这个概念(Document),这里的一个Document也可以理解成关系数据库中的一条记录(Record),只是这里的Document的变化更丰富一些,如Document可以嵌套。
  • MongoDB中Document 中 可以出现的数据类型
    在这里插入图片描述
  • 1.4 MongoDB在Linux的安装
    在这里插入图片描述
    在这里插入图片描述
  • 1.5 MongoDB启动和参数说明
    在这里插入图片描述
  • 1.6 mongo shell 的启动
    在这里插入图片描述

MongoDB命令

  • 1.1 MongoDB的基本操作
    在这里插入图片描述
  • 1.2 MongoDB集合数据操作(CURD)
    1.2.1 数据添加
    在这里插入图片描述
    1.2.2 数据查询
    比较条件查询
    db.集合名.find(条件)
    在这里插入图片描述
    1.2.3 逻辑条件查询
    在这里插入图片描述

MongoDB索引Index

  • 什么是索引
    在这里插入图片描述
  • 索引类型
    1.1 单键索引 (Single Field)

MongoDB支持所有数据类型中的单个字段索引,并且可以在文档的任何字段上定义。对于单个字段索引,索引键的排序顺序无关紧要,因为MongoDB可以在任一方向读取索引。
单个例上创建索引:
db.集合名.createIndex({“字段名”:排序方式})

特殊的单键索引 过期索引 TTL ( Time To Live)
TTL索引是MongoDB中一种特殊的索引, 可以支持文档在一定时间之后自动过期删除,目前TTL索引
只能在单字段上建立,并且字段类型必须是日期类型。
在这里插入图片描述
1.2 复合索引(Compound Index)

通常我们需要在多个字段的基础上搜索表/集合,这是非常频繁的。 如果是这种情况,我们可能会考虑在MongoDB中制作复合索引。
复合索引支持基于多个字段的索引,这扩展了索引的概念并将它们扩展到索引中的更大域。

制作复合索引时要注意的重要事项包括:字段顺序与索引方向。
在这里插入图片描述
1.3 多键索引(Multikey indexes)

针对属性包含数组数据的情况,MongoDB支持针对数组中每一个element创建索引,Multikeyindexes支持strings,numbers和nested
documents

1.4 地理空间索引(Geospatial Index)

针对地理空间坐标数据创建索引。 2dsphere索引,用于存储和查找球面上的点 2d索引,用于存储和查找平面上的点

在这里插入图片描述
1.5 全文索引

MongoDB提供了针对string内容的文本查询,TextIndex支持任意属性值为string或string数组元素的索引查询。注意:一个集合仅支持最多一个Text Index,中文分词不理想 推荐ES。

db.集合.createIndex({
    
    "字段": "text"})  
 db.集合.find({
    
    "$text": {
    
    "$search": "coffee"}}

1.6 哈希索引 Hashed Index

针对属性的哈希值进行索引查询,当要使用Hashed index时MongoDB能够自动的计算hash值,无 需程序计算hash值。注:hash index仅支持等于查询,不支持范围查询。

db.集合.createIndex({
    
    "字段": "hashed"})

MongoDB应用实战

  • MongoDB的适用场景
    在这里插入图片描述
  • MongoDB的行业具体应用场景
    在这里插入图片描述
  • 如何抉择是否使用MongoDB
    在这里插入图片描述

Spring Boot 访问 MongoDB

  • MongoTemplate 的方式
    第1步:基于maven新建springboot工程
    在这里插入图片描述
    第2步: 配置文件application.properties
    在这里插入图片描述
    第3步: DAO 实现类 注入 MongoTemplate 完成增删改查
    @Autowired protected MongoTemplate mongoTemplate;
    在这里插入图片描述
    第4步: 从Spring容器中获取DAO对象 进行测试

  • MongoRepository 的方式
    第1步:基于maven新建springboot工程
    在这里插入图片描述
    第2步: 配置文件application.properties
    在这里插入图片描述
    第3步:编写实体类 并在实体类上打@Document(“集合名”)
    第4步:编写 Repository 接口 继承 MongoRepository
    方法具体参考
    :https://docs.spring.io/springdata/jpa/docs/current/reference/html/#jpa.query-methods.query-creation
    如果内置方法不够用 就自己定义 如:定义find|read|get 等开头的方法进行查询
    第5步: 从Spring容器中获取Repository对象 进行测试

多数据源配置

yml配置文件:

mongodb:
  url: mongodb://user:[email protected]:27017/
  database:
    test: test
    test1: test1

首先创建@Bean:

@Configuration
public class MongoDBConfig {
    
    

    @Value("${mongodb.url}")
    private String mongoUrl;

    @Value("${mongodb.database.test}")
    private String test;

    @Value("${mongodb.database.test1}")
    private String test1;

    @Primary
    @Bean
    public  MongoTemplate mongoTemplate() {
    
    
        return new MongoTemplate(
                new SimpleMongoClientDatabaseFactory(MongoClients.create(mongoUrl), test));
    }

    @Bean(name = "TemplateTest")//数据源1的database使用test
    public  MongoTemplate mongoTemplateTest() {
    
    
        return new MongoTemplate(
                new SimpleMongoClientDatabaseFactory(MongoClients.create(mongoUrl), test));
    }

    @Bean(name = "TemplateTest1")//数据源2的database使用test1
    public MongoTemplate mongoTemplateTest1() {
    
    
        return new MongoTemplate(
                new SimpleMongoClientDatabaseFactory(MongoClients.create(mongoUrl), test1));
    }
    // 开启事务
    @Bean
    MongoTransactionManager transactionManager(MongoDatabaseFactory factory){
    
    
        return new MongoTransactionManager(factory);
    }
}

接下来,使用:

@Repository
public class DemoDaoImpl implements DemoDao {
    
    

    @Autowired
    @Qualifier("TemplateTest")
    private MongoTemplate mongoTemplateTest;

    @Autowired
    @Qualifier("TemplateTest1")
    private MongoTemplate mongoTemplateTest1;

    @Override
    public void saveDemo(DemoEntity demoEntity) {
    
    
        mongoTemplateTest1.save(demoEntity);
    }

    @Override
    public void removeDemoById(Long id) {
    
    
        Query query = new Query(Criteria.where("id").is(id));
        mongoTemplateTest.findAllAndRemove(query,DemoEntity.class);
    }

    @Override
    public void updateDemo(DemoEntity demoEntity) {
    
    
        Query query = new Query(Criteria.where("id").is(demoEntity.getId()));

        Update update = new Update();
        update.set("title", demoEntity.getTitle());
        update.set("description", demoEntity.getDescription());
        update.set("by", demoEntity.getBy());
        update.set("url", demoEntity.getUrl());
        update.set("corn", demoEntity.getCorn());

        mongoTemplateTest.updateFirst(query, update, DemoEntity.class);
    }

    @Override
    public DemoEntity findDemoById(Long id) {
    
    
        Query query = new Query(Criteria.where("id").is(id));
        DemoEntity demoEntity = mongoTemplateTest.findOne(query, DemoEntity.class);
        return demoEntity;
    }

    @Override
    public List<DemoEntity> findDemos() {
    
    
        return mongoTemplateTest.findAll(DemoEntity.class);
    }
}

MongoDB架构

MongoDB集群高可用

MongoDB安全认证

猜你喜欢

转载自blog.csdn.net/qq_44949002/article/details/121600539