MongoDB 踩坑记录(可能会持续更新)

栏目: 数据库 · 发布时间: 5年前

内容简介:使用 Hibernate 的时候我们可以利用MongoDB 默认会使用生成的 ObjectId 作为主键 ID:如果想使用自定义的 ID,也可以将

数据校验

使用 Hibernate 的时候我们可以利用 javax.validation 包中提供的一系列 API 对传入数据库的数据进行校验。使用 MongoDB 时,需要显式的在配置当中打开,不然校验不会生效:

@Configuration
public class DataSourceConfig {

    @Bean
    public ValidatingMongoEventListener validatingMongoEventListener() {
        return new ValidatingMongoEventListener(validator());
    }

    @Bean
    public LocalValidatorFactoryBean validator() {
        return new LocalValidatorFactoryBean();
    }
}

索引有关

使用非 ObjectId 作为 Id

MongoDB 默认会使用生成的 ObjectId 作为主键 ID:

@Data
@Document
public class Book {
    @Id
    private String id;
    // ...
}

如果想使用自定义的 ID,也可以将 @Id 加在自定义字段上:

@Data
@Document
public class Book {
    @Id
    private String bookId;
    // ...
}

但注意,这时 bookId 一定要进行初始化操作,不然 MongoDB 仍然会生成一个 ObjectId 作为主键。

同时,主键 @Id 一定是唯一的,因此不需要再使用 @Indexed

联合索引

MySQL 类似,MongoDB 的联合索引(Compound Index)也是按照最左原则进行匹配的。例如下面一个索引:

@Data
@Document
@CompoundIndexes({
        @CompoundIndex(name = "code_and_owner_idx", unique = true, def = "{'code': 1, 'ownerId': 1}")
})
public class Book {
    @Id
    private String bookId;

    @NotBlank
    private String code;

    @NotBlank
    private String ownerId;
}

使用 codeownerId 进行查询会 hit 到索引,使用 code 查询会 hit 到索引,但使用 ownerId 进行查询则会进行 Document 扫描,当数据量大的时候性能会有非常大的下降。因此在建立联合索引的时候应该特别注意字段的顺序。

事务有关

MongoDB 3.X 并不支持多 Document 的事务。MongoDB 4.0 才开始支持多 Document 的事务。

当在 Spring 使用时,单纯的加入 @Transactional 是不行的,需要显式的在配置当中打开:

@Configuration
public class DataSourceConfig {

    @Bean
    MongoTransactionManager transactionManager(MongoDbFactory dbFactory) {
        return new MongoTransactionManager(dbFactory);
    }
}

MongoDB 4.0 的事务支持并不支持单机(Standalone)部署,因此如果使用本地开发的单机 MongoDB,加上 @Transactional 进行操作,会直接导致崩溃(MongoDrive 3.8.2)。

同时 MongoDB 4.0 不支持在分片(Sharding)部署上使用,对分片的支持计划 4.2 才推出。考虑到大部分公司使用的还是 3.X 的版本,因此 MongoDB 现在的事务支持基本是不可用的。设计 Mongo 文档格式的时候,应考虑尽量减少多文档事务的操作,

参考资料


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Haskell趣学指南

Haskell趣学指南

[斯洛文尼亚] Miran Lipovaca / 李亚舟、宋方睿 / 人民邮电出版社 / 2014-1

《haskell趣学指南》是一本讲解haskell这门函数式编程语言的入门指南,语言通俗易懂,插图生动幽默,示例短小清晰,结构安排合理。书中从haskell的基础知识讲起,涵盖了所有的基本概念和语法,内容涉及基本语法、递归、类型和类型类、函子、applicative 函子、monad、zipper及所有haskell重要特性和强大功能。 《haskell趣学指南》适合对函数式编程及haske......一起来看看 《Haskell趣学指南》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

SHA 加密
SHA 加密

SHA 加密工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具