一、简介
-
非关系型数据库(nosql数据库)中的文档型关系数据库
以bson(升级版json格式)结构存储数据 -
非关系型数据库特点
1.数据模型比较简单.(主要)
2.需要灵活性更强的应用系统
3.对数据库性能要求较高(主要)
4.不需要高度的数据一致性(主要)
5.对于给定key,比较容易映射复杂值的环境. -
mongodb特点
1:JSON结构和对象模型接近,开发代码量少
2:JSON动态模型意味着更容易响应新的业务需求
3:复制集提供了 99.999%高可用
4:分片架构支持海量数据无缝扩容 -
每个文档大小不能超过16MB
二、 MongoDB范式化与反范式化
-
范式化:将数据分散到多个不同的集合,不同集合之间可以相互引用数据。如果要修改数据,只需修改保存这块数据的文档就行。但是MongoDB没有连接(join)工具,所以在不同集合之间执行连接查询需要进行多次查询。
-
反范式化:将每个文档所需的数据都嵌入在文档内部。每个文档都有自己的数据副本,而不是所有文档共同引用一个数据副本。但是如果数据发生变化,那么所有相关文档都需要进行更新。
-
范式化能够提高数据写入速度,反范式化能够提高数据读取速度。
三、Spring Data
Spring Data方法命名规范
关键字 | 例子 | JPQL |
---|---|---|
And | findByNameAndAge(String name, Integer age) | where name = ? and age = ? |
Or | findByNameOrAge(String name, Integer age) | where name = ? or age = ? |
Is | findByName(String name) | where name = ? |
Between | findByAgeBetween(Integer min, Integer max) | where age between ? and ? |
LessThan | findByAgeLessThan(Integer age) | where age < ? |
LessThanEqual | findByAgeLessThanEqual(Integer age) | where age <= ? |
GreaterThan | findByAgeGreaterThan(Integer age) | where age > ? |
GreaterThanEqual | findByAgeGreaterThanEqual(Integer age) | where age >= ? |
After | 等同于GreaterThan | |
Before | 等同于LessThan | |
IsNull | findByNameIsNull() | where name is null |
IsNotNull | findByNameIsNotNull() | where name is not null |
Like | findByNameLike(String name) | where name like ? |
NotLike | findByNameNotLike(String name) | where name not like ? |
StartingWith | findByNameStartingWith(String name) | where name like '?%' |
EndingWith | findByNameEndingWith(String name) | where name like '%?' |
Containing | findByNameContaining(String name) | where name like '%?%' |
OrderByXx[desc] | findByIdOrderByXx[Desc] (Long id) | where id = ? order by Xx [desc] |
Not | findByNameNot(String name) | where name != ? |
In | findByIdIn(List<Long> ids) | where id in ( ... ) |
NotIn | findByIdNotIn(List<Long> ids) | where id not in ( ... ) |
True | findByXxTrue() | where Xx = true |
False | findByXxFalse() | where Xx = false |
IgnoreCase | findByNameIgnoreCase(String name) | where name = ? (忽略大小写) |
网友评论