HighGo Database中类range的copy方法无效类型不支持使用=或<>等操作符?

MongDB作为NoSQL数据库之一,主要关注:灵活性、扩展性、高可用灵活性:NoSQL的特点就是反范式理论,为数据的水平扩展和字段的组织提供了巨大的便利高可用:天生就伴随副本集(从节点)的概念,通过Raft算法实现集群的高可用;扩展性:拥有分片机制,不需要应用程序或者插件就能实现数据分片和分片集群的搭建,只需要启动一个分片服务器、分片配置服务器、路由服务器即可自动进行分片和分片查询;MongoDB是最接近关系数据库的非关系型数据库,提供了关系数据库的众多核心功能,实现了其中众多核心概念:
索引机制存储引擎和存储函数:WiredTiger存储引擎、js的存储函数;事务机制:ACID和Base理论的结合日志系统:慢查询、journal log(redo log)、oplog类SQL的查询(甚至支持Lookup左连接查询)基础快速入门数据结构数据结构(逻辑)SQLMongoDB备注databasedatabasetablecollectionrowdocumentcolumnfieldprimary keyprimary key主键indexindex索引viewview视图支持视图、索引、事务、数据分片和分布式管理通过命名空间进行操作,一般MongoDB有三层命名空间
databsecollectiondocument文档的id一般由**:时间戳、客户端ID、客户进程ID、三个字节的增量计数器**组成MongoDB支持存储过程,它是javascript写的,保存在db.system.js表中。数据模型校验器required : 数据可以是任意类型,表示这个数据必须传入max: 用于Number 类型数据,最大值min: 用于Number 类型数据,最小值enum:枚举类型(数组中的类型是String),要求数据必须满足枚举值enum: [‘0’, ‘1’, ‘2’]match:增加的数据必须符合match(正则)的规则maxlength:数据必须是String类型,数据最大长度minlength:数据必须是String类型,数据最小长度bsonType:数据类型validator: {
#校验器
$jsonSchema: {
#json数据格式约束
bsonType: "object",
#类型
required: [ "name", "year", "major", "address" ], #必须的字段
properties: {
#字段规则
name: {
bsonType: "string",
description: "must be a string and is required"
},
year: {
bsonType: "int",
minimum: 2017,
maximum: 3017,
description: "must be an integer in [ 2017, 3017 ] and is required"
},
major: {
enum: [ "Math", "English", "Computer Science", "History", null ],
description: "can only be one of the enum values and is required"
},
gpa: {
bsonType: [ "double" ],
description: "must be a double if the field exists"
},
address: {
bsonType: "object",
required: [ "city" ],
properties: {
street: {
bsonType: "string",
description: "must be a string if the field exists"
},
city: {
bsonType: "string",
"description": "must be a string and is required"
}
}
}
}
}
}
数据结构(物理)JSON格式存取BSON格式保存(BSON就是JSON的二进制形式,并且增强了JSON)数据最终通过B-Tree的形式在文件系统中组织存储;数据库基本操作options是操作可以携带的条件,同样是key-value形式数据库操作数据库增删改查
使用:use
增:在use的数据库中插入数据即可(如果没有该数据库则创建、有则插入数据)删:db.dropDatabase()
删除use的数据库查:show dbs用户
切换用户use usernam登录:auth(“用户名”,“密码”)创建用户:db.createUser视图索引集合操作增删改查
增:db.createCollection(name,options)
可选的options: 删:db.集合名.drop()改:查
查看该数据库全部集合:show collections()查看某一个集合的状态:db.集合名称.stats()文档操作(集合操作文档) MongoDB通过BSON格式保存文档数据,BSON由一个到多个key-value键值对组成;
文档就像关系数据库的具体数据一样,操作是通过collection进行;
文档操作类似关系数据库,主要分为
select子句:where子句limit子句group by子句order by子句 命令:
增删改: db.<collectionName>.<操作>()
查 db.<collectionName>
.find(
{query},#where子句
{fields}#select子句(一般指定查询的field字段)
)
.group()#group子句
.sort()#order by子句
.limit().skip()#limit子句
增 insertOne
insertMany
insert
# db.<collectionName>.insert({data},{options})
db.test1.insert({
"name":"www",
"hhh":123
})
#db.<collectionName>.insertMany([{data}……],{options})
db.test.insertMany(
[
{"name":"lili","age":19},
{"name":"liyi","age":20},
{"name":"liuliu","age":21}
]
)
删 有delete和remove俩种删除方法(推荐使用delete)
deleteOnedeleteManyremove # db.<collectionName>.remove(<query>,{options})
db.test1.remove({
{"tid":"test"},#query,相当于SQL的where
{"justOne":true}#只删除一条记录
})
db.test1.insert(
{ item: "envelopes", qty : 100, type: "Clasp" },
{ writeConcern: { w: "majority" , wtimeout: 5000 } } #开启写关注
)
改 改主要有两种手段:覆盖(save、replace)、查询修改(update)
updateOneupdateManyupdatesavereplaceOne 主要操作
$set:修改$unset:删除字段$push:添加元素(一般用在数组)$inc:数值+x #覆盖,save覆盖一般需要携带_id,来覆盖指定id的文档
# db.<collectionName>.save(data,{options})
db.test1.save("_id":ObjectId("xxxxxxxxxx"),其他数据部分,{options})
#更新
# db.<collectionName>.update(<query>,<update{data},update{date}……>,{options})
#update:$set、$inc等
db.test1.update({},{$set:{'title':'HHHH'},{options}})
查 支持组合操作、支持批量操作
# db.<collectionName>.find(<query>,<fields>)
db.test1.find({}) #查询所有
#查询名字为lili的age字段 SELECT age FROM test1 WHERE name = 'lili'
db.test1.find({"name":"lili"},{"age":1})
db.test.find({$or: [{"age": {$gt:22}},{name:"www"}]})
query子句内置函数 主要有:
事务相关
snapshotreadConcernreadRef统计相关
explain:类似SQL的expail,用于分析count:统计数量聚合相关
limit和skip:SQL的limitsort:SQL的sort(-1表示倒排,1表示顺序)max和min连接相关
closemaxTimeMS其他
pretty:提高可读性forEach、next、hashNext
管道聚合框架聚合框架(Aggregation Framework)是用于在一个或几个集合上进行的一系列运算从而得到期望的数据集的运算框架。主要有管道聚合、map-reduce、单一目的聚合;下面主要介绍管道聚合管道(PipeLine):管道是聚合框架对数据进行处理的过程,和操作系统的管道类似(单向、流、保存在内存中)构件:筛选($filter)、投射($project)、 分组($group)、 排序($sort)、 限制($limit)和跳过($skip)、过滤($match )、连接运算($lookup)、展开、图搜索($graphLookup)、分面搜索($facet/$bucket )、运算的子运算等。
连接运算:只支持左外连接子运算:
步骤(Stage):步骤是管道中数据流动的一系列操作,就是执行的构件;#
db.<collectionName>.aggregate({stage},……)
#下面是管道的两步操作
db.test1.aggregate([
{
$match: { status: "A" }
}, #stage1
{
$group: {
_id: "$cust_id",
total: { $sum: "$amount" }
}
}#stage2
])
使用下面主要基于SpringBoot整合MongoDBSpringBoot-mongo基础<!---mongodb相关依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
mongodb:
host: localhost
port: 27017
database: 数据库名
username: XXX
password: xxx
authentication-database:
认证的权限
实体类:
@Document:标记实体类@MongoId:标记主键@Field:标记为属性(如果属性名和数据库不同需要指定)@Transient:标记属性不作为数据库的属性@DBRef:标记属性位一个document对象@Indexed:标记为该key设置索引@CompoundIndex:联合索引@CompoundIndexes:多个联合索引通过MongoTemplate进行操作常用的类
查询:Query类
如果文件很大需要允许使用磁盘:query.allowDiskUse(true);条件:BasicDBObject、CriteriaUpdate:更新类(拼接数据)DeleteResult、UpdateResult:删除结果、更新结果例子https://www.cnblogs.com/luoxiao1104/p/15145686.html
//实体类
@Data
@NoArgsConstructor
@AllArgsConstructor
@CompoundIndexes(
{
@CompoundIndex(def = "{name:1,clazz:1,age:-1}")//联合索引
}
)
@Document("test")
public class StudentEntity {
@MongoId
//@Indexed(unique = true,name = "_id"):默认主键就是唯一索引
private Long id;
private String name;
@Field("class")
@Indexed(name = "class_text")//普通索引
private String clazz;
private Integer age;
private String[] hobby;
private Date dateTime;
@Transient
private String other;
}
//使用
public void updateUser(){
//根据id查询数据
User user = mongoTemplate.findById("611a1cf8d5ba747098ff4625", User.class);
//设置修改的值
user.setName("lisi");
user.setAge(18);
//调用方法实现修改操作
Query query = new Query(Criteria.where("_id").is(user.getId()));
Update update = new Update();
update.set("name",user.getName());
update.set("age",user.getAge());
UpdateResult upsert = mongoTemplate.upsert(query, update, User.class);
long count = upsert.getModifiedCount();
System.out.println(count);
}
MongoDbTemplateCriteria 用于创建查询的中心类。它遵循流畅的API风格,因此您可以轻松地将多个条件链接在一起。标准的静态导入。这种方法提高了可读性。
简单来说就是专门处理条件的类,一般通过静态方法直接创建;
包含前面提到的几乎所有查询:例如
//爱好必须为"睡觉", "吃饭",且顺序一致;
//Criteria.where("hobby").all("睡觉", "吃饭").size(2);爱好是吃饭睡觉,顺序不要求
final Criteria hobby = Criteria.where("hobby").is(new String[]{"睡觉", "吃饭"});
final Criteria criteria = new Criteria();//用于组合条件
final Criteria age = new Criteria("age").lt(22).gt(5);//年龄6-21
final List<StudentEntity> studentEntities = mongoTemplate.find(
new Query(criteria.andOperator(age,new Criteria().orOperator
(hobby,Criteria.where("name").is("zhangsan3")))), StudentEntity.class, "test4");
QueryAggregationSpringBoot提供了:Aggregation和TypeAggregation、AggregationUpdate处理聚合条件,
TypeAggregation:对指定集合聚合,输出指定的实体类型Aggregation:通用的聚合类(另外两个都是其子类)AggregationUpdate:显然是用于update重点索引MongoDB能快速查找到主要原因是其强大的索引机制: 除了和关系数据库类似的:单字段索引、复合索引(同样有最左匹配原则)、hash索引、Hash索引(散列索引):散列索引是指按照某个字段的散列值来建立索引;多键值索引(数组索引):主要是key对应的value是数组的情况过期索引:会过期的索引,在索引过期之后,索引对应的数据会被删除全文索引:MongoDB会自动对索引的Field的数据进行分词,极大加快查找速度(不支持中文分词)地理空间索引:
2d索引:可以用来存储和查找平面上的点2d sphere索引:可以用来存储和查找球面上的点。文本搜索 文本搜索显然是MongoDB的亮点之一,
基于正则表达式的全文搜索:range基于全文索引的$text 进行文本搜索,首先需要在文本搜索的Field建立索引
和ES类似,MongoDB的文本搜索也是一个赋分的制度,分值越高说明匹配度越高;
$$text、$search、score、$meta$:是核心关键字
#简单的搜索
db.<collectionName>.find({$text:{$search:"Jon"}})
#多关键词搜索,注意这种搜索是 or的关系,有index 或者 有 operator都可以,所以,这个搜索会出来 Jon Snow,Jon Bon Jovi, Don Jon 等好多名字,而且 Jon Snow还不一定能出现在第一个
db.<collectionName>.find({$text:{$search:"Jon Snow"}})
#有Jon 但是没有Don的
db.<collectionName>.find({$text:{$search:"Jon -Don"}})
#搜索包含Jon Snow的词组。用这个搜索,我发现就出不来了。 因为我们的库里面的词组是Jon Aegon Snow
db.<collectionName>.find({$text:{$search:"\"Jon Snow\""}})
#加了下评分权重的排序。
db.<collectionName>.find( {$text:{$search:"Jon Snow"}}, {score:{$meta:"textScore"}} ).sort({score:{$meta:"textScore"}})
#使用两个短语,这就是一个逻辑上的AND关系,完美。假如你要使用mongodb 多个字符串匹配的查询,就用这个。不过,据说对中文分词不行。
db.<collectionName>.find({$text:{$search:"\"Jon\"\"Snow\""}})
视图聚合聚合操作处理数据记录和 return 计算结果。聚合操作将来自多个文档的值组合在一起,并且可以对分组数据执行各种操作以返回单个结果。MongoDB 提供了三种执行聚合的方法:聚合管道,map-reduce function和单一目的聚合方法。
管道聚合:前面已经介绍过映射规约(map-reduce):映射规约是大数据处理的一种基本思想;
Map-reduce 使用自定义 JavaScript 函数来执行 map 和 reduce操作,以及可选的 finalize 操作。map-reduce 操作有两个阶段:
map 阶段:它处理每个文档并为每个输入文档发出一个或多个对象reduce阶段:将map操作的输出组合在一起 单一目的聚合
MongoDB 还提供 db.collection.estimatedDocumentCount(), db.collection.count()和db.collection.distinct()进行简单的聚合操作(统计和去重) 事务复杂的查询数组和嵌套文档数组 { : { : , … } }
# fruits和aminal都是数组
db.test2.insertMany(
[
{"name":"lili","age":19,"fruits":["apple","banana"],"aminal":["cat","dog"]},
……
]
)
# {<array field> : { <operator1>: <value1>, ... } }
db.test2.find( { fruits: ["apple", "banana"], aminal: { $all: ["cat", "dog"] } )
# fruits只包含两个元素"apple","banana"并且按顺序的数组
# $all:表示只要包含"cat"和"dog",不需要知道是否包含其他和顺序
#可以通过下标指定元素(下标由0开始);
db.test2.find( { fruits.1: "apple"} )
#指定fruits第二个元素必须为apple
# $elemMatch:对元素进行多条件查询
#数组中最少一个元素同时满足所有的查询条件。
db.test2.find( { age: { $elemMatch: { $gt: 22, $lt: 30 } } } )
#数组存在一个元素大于22且小于30
# $size:元素的个数
db.test2.find( { fruits: { $size: 3 } } )
#fruits有三个元素的文档
嵌套文档{ : { : }, … }和数组基本一致,不过嵌套文档嵌套的数据可以比较复杂;
需要子文档属性的顺序
对嵌套文档整体做等值匹配的时候,要求的是对指定文档的精确匹配,包含字段顺序。可以像数组一样指定字段
例如``likes.amnimal`:指定为嵌套文档的amniamal字段db.test2.insertMany(
[
{"name":"liyi","age":20,"likes":{{"fruits":["watermalon","banana"]},{"aminal":["panda","mouse"]}}},
……
]
)
#由于等值查询,必须对查询的fruits、aminal和likes保存的顺序一致
db.inventory.find( { likes: { fruits: [], aminal:[] } } )
#指定likes的fruilts的第二个元素
db.test2.find( { likes.fruits.1: "apple"} )
集合框架搜索文本查询(文本搜索)地理空间查询待学习集合MongoDB的集合类似MySQL的表(关系模型),类似redis的hash表,在MongoDB中,几乎一切数据都是通过集合组织起来的;在MongoDB中集合有俩种类型:固定集合和动态分配集合,动态分配集合又可以分为:有约束和没有约束(即校验器校验)capped collection:固定集合,顾名思义,就是大小、存储文档数量固定的集合;在固定集合中:
循环覆盖:没有足够空间时,最老的文档会被删除以释放空间,新插入的文档会占据这块空间。不能更改:无法将固定集合转换为非固定集合,也不能修改固定集合容量和可存最大文档数据有序:自然顺序就是文档的插入顺序,可以指定由就到新或者相反;动态分配集合:就是一般的集合,没有固定的大小,由hash节点的node记录相关信息;
1.1 大数据时代1.高并发读写需求2.高效率存储和访问需求3.高扩展性1.2 认识NoSQLNot Only SQL 解决大规模数据集合下数据种类多样性的挑战1.2.2 NoSQL的特点
特点:
1、易扩展:数据表之间无关系
2、高性能:高并发读写性能,细粒度的cache
3、灵活的数据模型:方便添加字段
4、高可用
1.2.3 关系型和非关系型数据库的区别1.存储方式关系型数据库:表的格式存储,数据以行和列的方式存储,读取查询方便。非关系型数据库:数据集的方法存储。2.存储结构关系型数据库:结构化的方式存储数据,每张数据表都要先定义结构,可靠/稳定,修改困难。非关系型数据库:动态结构。3.存储规范关系型数据库:管理数据复杂。非关系型数据库:平面数据集的方式存放,读写数据方便。4.扩展方式1.3 NoSQL 基础理论1.3.1 CAP理论一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)分布式系统只能实现两个要素。取舍策略应用场景CAOracle、SQL Server、MySQLCPMongoDB、HBase、RedisAPDynamoDB1.3.2 BASE理论1.3.3 最终一致性1.4 NoSQL数据库分类1.4.1 键值对存储数据库key是查找每条数据的唯一标识符,value是存储的内容
Redis
用于会话存储和购物车1.4.2 文档存储数据库存储和管理文档,文档是结构化的数据(JSON、XML、BSON)
MongoDB
用于内容管理应用程序和电子商务应用程序内容管理应用程序:博客和视频平台1.4.3 列式存储数据库HBase、Cassandra。便于数据分析1.4.4 图形存储数据库2.1 MongoDB概述2.1.3 MongoDB的优势支持多种存储引擎WiredTiger存储引擎、内存存储引擎(In-Mermory)3.2版本后默认为WiredTiger,4.x版本不再支持MMAPv12.2 MongoDB体系结构文档(Document)、集合(Collection)、数据库(Database)组成1.数据库数据库存储集合和文档。一个数据库可创建多个集合,原则上将逻辑相近的集合放在一个数据库2.集合集合就是MongoDB的一组文档,分为一般集合和上限集合。3.文档文档以键值对的形式存储在集合中,键用于唯一标识一个文档,为字符串类型,值可以是各种复杂的文件类型,这种存储形式为BSON(BinaryJSON)。每个文档都有默认的_id键,相当于主键,这个键的值必须在同一个集合中唯一,默认为ObjectId类型,用户如果不设置,会自动生成。2.3 MongoDB数据类型数据类型相关说明Double双精度浮点型String字符串,MongoDB仅支持UTF-8编码的字符串Object对象类型Array数组Binary data二进制数据ObjectId对象IDBoolean布尔Data日期,以UNIX格式存储毫秒数,不存储时区Null空Regular Expression正则表达式Code代码类型,存储js代码到文档Int3232位整数Timestamp记录文档修改/添加的具体时间Int6464位整数Decimal128记录货币数据Min keyMax key1.数字类型{
"_id": ObjectId("5e042c88b"),
"age32": 32,
"age64": NumberLong(64),
"price": NumberDecimal(64.3)
}
2.日期类型3.数组类型{
"_id": ObjectId("5e042c88b"),
"hobby": [
"swim",
"run",
"sing",
4.0,
"sing"
]
}
4.ObjectId类型ObjectId类型是一个12字节BSON类型。ObjectId由4部分组成:Time:前4字节Machine:Time后的3个字节表示主机。PID:Machine后2个字节表示进程标识符。INC:PID后3个字节,随机值MongoDB中存储的文档必须有一个_id键,采用ObjectId的原因是在多个服务器中同步自增主键非常耗费时间。5.内嵌文档文档中一个对象类型的字段在MongoDB中称为内嵌文档(Embedded),也是MongoDB推荐的存储格式。{
"_id": ObjectId("5e042c88b"),
"size": {
"h": 8.5,
"w": 11.0
},
"reading": [
"John",
"Dave"
]
}
6.Code类型2.4 MongoDB的使用规范1.数据库使用规范命名建议:名称全部小写不用数字开头db_xxxx2.集合使用规范命名建议:名称全部小写不用数字开头t_xxxx使用“.”来分隔不同命名空间的子集合3.2 数据库操作3.2.1 新建数据库use DATABASE_NAME
3.2.2 查看数据库# 查看所有数据库
show dbs
# 查看当前数据库
db
dbs:databases3.2.3 删除数据库db.dropDatabase()
db表示当前数据库对象,dropDatabase()删除当前数据库的方法3.3 集合操作3.3.1 创建集合# 显式创建
db.createCollection(COLLECTION_NAME, [OPTIONS])
# 隐式创建
db.COLLECTION_NAME.insert(DOCUMENT)
# 查看集合
show collection
3.3.2 删除集合db.COLLECTION_NAME.drop()
3.4 文档的插入、更新与删除操作3.4.1 文档插入分为单文档插入和多文档插入# 单文档插入
db.COLLECTION_NAME.insert(document)
db.COLLECTION_NAME.save(document) #用不了
# 多文档插入
db.COLLECTION_NAME.insertMany([document1,document2,...])
insert()只插入save()可以更新和写入3.4.2 文档更新db.COLLECTION_NAME.update(criteria, objNew, upsert, multi)
criteria:更新的查询条件,类似where后的条件,主要用于匹配文档。objNew:表示更新的对象和一些更新的操作符,类型sql更新查询中set后的条件。upsert:可选参数。multi:默认为false,只更新找到的第一个文档;若为true,则将按条件查出来的多个文档都更新。可选参数。db.comment.update({"content":"原内容"},{$set:{"content":"更改后的内容"}})
3.4.3 文档删除# 删除单个文档
db.COLLECTION_NAME.remove(
<query>,
{
justOne:<boolean>,
writeConcern:<document>
}
)
# 删除所有文档
db.COLLECTION_NAME.remove({})
: 可选参数,表示删除文档的条件。justOne:可选参数,为1或true时,只删除找到的第一个文档。writeConcern:表示抛出异常的级别db.comment.remove({"nickname":"buzz"})
3.5 文档简单查询3.5.1 查询所有文档db.COLLECTION_NAME.find()
3.5.2 按条件查询文档# 与 同时满足多个条件的文档
db.comment.find({$and:[{"userid":1005,"nickname":"buzz"}]})
# 或 满足其中一个条件
db.comment.find({$or:[{"userid":1005},{"userid":1006}]})
# 大于 大于1005的 $gt
db.comment.find({"userid":{$gt:1005}})
# 小于 $lt
db.comment.find({"userid":{$lt:1005}})
# 大于等于
db.comment.find({"userid":{$gte:1005}})
# 小于等于
db.comment.find({"userid":{$lte:1005}})
# 不等于$ne
db.comment.find({"userid":{$ne:1005}})
# 包含
db.comment.find({"_id":{$in:["1","3","5"]}})
# 不包含 nin
3.5.3 按特定类型查询文档分为Null类型查询、正则表达式查询、嵌套文档查询和数组查询。嵌套文档查询包括精确匹配查询和点查询。3.6 聚合操作MongoDB的聚合操作包括聚合管道操作和Map-Reduce操作。聚合管道操作:3.6.1 聚合管道操作使用不同的管道阶段操作器进行不同聚合操作。管道阶段操作器也称为管道操作符。常见管道操作符相关说明$group将集合中的文档进行分组,便于后续统计结果$limit用于限制MongoDB聚合管道返回的文档数$match用于过滤数据,只输出符合条件的文档$sort将输入的文档先进行排序,再输出$project用于修改输入文档的结构(增加、删除字段)和名称$skip在聚合管道中跳过指定数量的文档,并返回剩余的文档常见管道表达式相关说明$sum计算总和$avg计算平均值$min获取集合中所有文档对应值的最小值$max获取集合中所有文档对应值的最大值$push$first$last3.6.2 Map-Reduce操作3.7 使用索引优化查询3.7.1 索引概述3.7.2 索引操作1.查看索引db.COLLECTION_NAME.getIndexes()
2.查看索引大小db.COLLECTION_NAME.totalIndexSize()
3.创建索引db.COLLECTION_NAME.createIndexe(keys, options)
4.1 副本集概述4.2 副本集成员主要三个成员,主节点(primary)、副本结点(secondary)、仲裁结点(arbiter)。4.4 副本集操作4.4.1 查看副本集成员状态4.5 副本集机制4.5.1 同步机制副本结点默认以主结点作为同步源进行数据同步。MongoDB使用两种形式完成数据同步过程,分别是完整同步和变化同步。4.5.2 选举机制如果主节点发生故障,导致无法使用,则其他拥有投票权的成员便会选举新的主结点。4.5.3 心跳检测机制5.1 分片概述分片(sharding)技术,数据划分,放在不同机器。可以降低单个机器的压力和处理更大的数据负载功能。分片和副本集的区别:分片是每个结点存储数据的不同片段,而副本集是每个结点存储数据的相同副本。5.2 分片策略分片键(shard key):将集合中的数据划分为多个块(chunk)(默认大小为64MB),分片键可以是集合文档中的一个或多个字段。1.范围分片(range sharding)MongoDB根据分片键的值范围将数据划分为不同块,每个分片都包含了分片键在一定范围内的数据。2.哈希分片(Hash sharding)数据随机分布在分片集群中不同的分片服务器上。性能更差。分片键(1)分片键一旦指定,后续无法更改,且只能有一个分片键。(2)不允许在已分片的集合文档上插入没有分片键的文档。(3)分片键的长度大小,不可超过512个字节。(4)用于作分片键的字段必须创建索引,索引可以是分片键开头的复合索引。块(chunk)大小(1)小块可以均匀地分布数据,但会导致迁移很频繁,会增大路由服务器的开销。(2)大块触发的迁移较少,但会导致数据分布不均匀。(3)块的大小会影响要迁移块的最大文档数。(4)块的分片键值范围是(-∞,+∞)5.3 分片集群架构分片服务器(Shard)、路由服务器(Mongos)以及配置服务器(Config Server)组成。1.分片服务器即MongoDB实例(即mongod)。实际存储数据的组件,持有完整数据集中的一部分,从MongoDB 3.6开始,必须将分片部署为副本集,这样有更好的容错性。2.路由服务器即mongos,主要提供客户端应用程序与分片集群交互的接口,所有请求都需要通过路由服务器进行协调工作。实际上就是一个消息分发请求中心,它负责把客户端应用程序对应的数据请求转发到对应的分片服务器上,应用程序将查询、存储、更新等请求发送给路由服务器。3.配置服务器即Config Server。存储分片集群的元数据,并且这些数据不允许丢失。6.1 GridFS 概述7.1 Redis 概述7.1.3 Redis应用场景缓存、构建队列系统、排行榜、实时反垃圾系统、过期数据自动处理、计数器应用等高并发场景。7.2 数据结构String、List、Set、Hash、Sorted Sets1.String值是二进制安全的,值数据类型可以是数字、文本、图片、视频或者序列化的对象等,值的最大长度不能超过512MB。键(Key)值(Value)Bookid1000202.List由若干个字符串元素组成的集合,每个字符串元素按照插入顺序排序。在读写操作时只能从头部或尾部开始,不能从中间开始。键(Key)值(Value)LBookid100020100021100022100022List中允许重复元素。3.Set不重复且无序的字符串元素组成。不重复:一个Set中所有元素都是唯一的,与List的区别;无序:所有字符串的读写是针对任意位置的,与List的区别键(Key)值(Value)SBookid1000211000221000201000234.Hash存储多个键值对之间的映射,属于无序的一个数据集合。key必须为字符串。value可以为字符串或数字,但value必须唯一。Hash的key之间可以采用 : 符号隔开,增加用户的可读性,并为用户提供更多信息。键(Key)值(Value)Book:name《格局》Book:id100021Book:authorwujunBook:price455.Sorted Sets有序集合:按照value自动排序。key必须唯一;value可以重复。键(Key)值(Value)Book:id04100021Book:id02100022Book:id03100023Book:id011000237.4 redis-cli操作redisredis自带命令行。7.4.1 操作键操作命令相关说明SET为key设置valueMSET为多个key设置valueKEYS查找符合pattern的keyGET获取key的valueMGET获取多个key的对应valueDUMP序列化key,返回被序列化的值EXISTS判断key是否存在TYPE查看key的类型RENAME删除key的valueEXPIRE设置key的生存时间,以秒计TTL返回key的剩余生存时间PRRSIST移除key的生存时间DEL在key存在时,删除key1.SET命令SET key value
2.MSET命令MSET key1 value1 key2 value2 ... keyN valueN
3.KEYS命令KEYS PATTERN
查找所有key:keys *4.GET命令GET key
5.MGET命令MGET key1 key2
7.4.2 操作字符串操作命令相关说明SETMSETGETMGETGETSET获取旧value并设置新valueSTRLEN字节长度GETRANGE获取指定索引范围的value内容SETRANGE为key的指定索引位置设置valueAPPEND追加到末尾7.4.3 操作列表Redis为List提供的操作操作命令相关说明RPUSH右插入LPUSH左插入LRANGELINDEXRPOP右弹出LPOP左弹出LLEN获取指定列表的长度LREM移除指定元素1.RPUSH命令RPUSH
7.4.4 操作集合set操作命令相关说明SADDadd 一个或多个SCARD获取元素数量SMEMBERS获取所有元素sismemberSREM移除SMOVE7.4.5 操作散列Hash操作命令相关说明hsethmsethgethmgethgetallhkeyshvalshdel7.4.6 操作有序集合sorted sets操作命令相关说明zaddzcardzcountzrangezscorezrem基于Hadoop生态9.4 Neo4j操作9.4.1 Neo4j 的Cypher操作Cypher是通过模式匹配Neo4j数据库中的结点和关系操作命令相关说明CREATE创建结点、关系MATCH查找所有符合给定关系的结点、关系以及属性数据RETURN返回查询结果WHERE过滤条件DELETE永久删除结点、关系REMOVE删除结点的属性Load csv with headers from 'file:///fortune1000.csv' as line
CREATE (p:Person {rank: line.rank, name: line.name, revenue: line.revenue}) return p

我要回帖

更多关于 vs找到一个或多个多重定义的符号 的文章

 

随机推荐