表
2、数据库常用操作
2.1 库和集合操作
show databases; | show dbs;
use 库名
db.dropDatabase( )
db
show collections; | show tables;
db.createCollection( '集合名称' , [ options] )
db.集合名称.drop( ) ;
2.2 文档操作
https://www.mongodb.com/docs/manual/reference/method/
db.集合名称.insert( document)
db.users.insert( { "name" : "shawn" ,"age" :23,"bir" : "2012-12-12" } ) ;
db.users.insertOne( { "name" : "shawn" ,"age" :23,"bir" : "2012-12-12" } ) ;
db.collection.insertMany( )
db.集合名称.insertMany(
[ < document 1 > , < document 2 > , .. . ] ,
{
writeConcern: 1 ,//写入策略,默认为1,即要求确认写操作,0是不要求。
ordered: true //指定是否按顺序写入,默认true,按顺序写入。
}
)
db.users.insert( [
{ "name" : "shawn" ,"age" :23,"bir" : "2012-12-12" } ,
{ "name" : "小黑" ,"age" :25,"bir" : "2012-12-12" }
] ) ;
for( let i = 0 ; i< 100 ; i++) {
db.users.insert( { "_id" :i,"name" : "编程不良人_" +i,"age" :23} ) ;
}
db.集合名称.find( ) ;
db.集合名称.remove(
< query> ,
{
justOne: < boolean> ,
writeConcern: < document>
}
)
db.集合名称.deleteMany( { query} )
db.users.deleteMany( { } ) ;
db.users.deleteMany( { age:23} ) ;
db.集合名称.update(
< query> ,
< update> ,
{
upsert: < boolean> ,
multi: < boolean> ,
writeConcern: < document>
}
) ;
db.集合名称.update( { "name" : "zhangsan" } ,{ name:"11" ,bir:new date( ) } )
db.集合名称.update( { "name" : "xiaohei" } ,{ $set :{ name:"mingming" } } )
db.集合名称.update( { name:”小黑”} ,{ $set :{ name:”小明”} } ,{ multi:true} )
db.集合名称.update( { name:”小黑”} ,{ $set :{ name:”小明”} } ,{ multi:true,upsert:true} )
2.3 文档查询
db.集合名称.find( query, projection)
db.集合名称.find( ) .pretty( )
db.集合名.find( { age:30} ) ;
db.集合名.find( { age:{ $lt :30} } ) ;
db.集合名.find( { age:{ $lte :30} } ) ;
db.集合名.find( { age:{ $gt :30} } ) ;
db.集合名.find( { age:{ $gte :30} } ) ;
db.集合名.find( { age:{ $ne :30} } ) ;
db.集合名称.find( { key1:value1, key2:value2,.. .} ) .pretty( )
db.users.find( { "age" :27,"name" : "欧力给" ,_id:8} ) ;
db.users.find( { "age" :3,"age" :27} ) ;
db.集合名称.find( { $or : [ { key1: value1} , { key2:value2} ] } ) .pretty( )
db.users.find( { $or :[ { _id:3} ,{ age:15} ] } ) ;
db.users.find( { age:{ $gt :15} ,$or :[ { _id:3} ,{ age:15} ] } ) ;
db.集合名称.insert( { "_id" : 11 , "age" : 29 , "likes" : [ "看电视" , "读书xx" , "美女" ] , "name" : "shawn_xx_11" } )
db.users.find( { likes:"看电视" } )
db.users.find( { likes:{ $size :3} } ) ;
db.users.find( { likes:/shawn/} ) ;
db.集合名称.find( ) .sort( { name:1,age:1} )
db.集合名称.find( ) .sort( { 条件} ) .skip( start) .limit( rows) ;
db.集合名称.count( )
db.集合名称.find( { "name" : "shawn" } ) .count( ) ;
db.集合名称.distinct( '字段' )
db.users.distinct( "age" ) ;
db.集合名称.find( { 条件} ,{ name:1,age:1} )
2.4 $type
$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果
db.col.find( { "title" : { $type : 2 } } ) .pretty( ) ;
db.col.find( { "title" : { $type : 'string' } } ) .pretty( ) ;
db.col.find( { "tags" :{ $type : 4 } } ) .pretty( ) ;
db.col.find( { "tags" : { $type : 'array' } } ) .pretty( ) ;
3、索引
3.1 原理
索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。 默认_id已经创建了索引
3.2 索引操作
db.集合名称.createIndex( keys, options)
db.集合名称.createIndex( { "title" :1,"description" :-1} )
db.集合名称.getIndexes( )
db.集合名.ensureIndex( { key:1} ) ;
db.集合名.ensureIndex( { key:1} ,{ unique:true} ) ;
db.集合名称.totalIndexSize( )
db.集合名称.dropIndexes( )
db.集合名称.dropIndex( "索引名称" )
db.集合名.find( { age:6} ) .explain( ) ;
createIndex() 接收可选参数,可选参数列表如下:
Parameter
Type
Description
background
Boolean
建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 “background” 可选参数。 “background” 默认值为false
unique
Boolean
建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
name
string
索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
sparse
Boolean
对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.
expireAfterSeconds
integer
指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
v
index version
索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
weights
document
索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
default_language
string
对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语
language_override
string
对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.
3.3 复合索引
一个索引的值是由多个 key 进行维护的索引的称之为复合索引
db.集合名称.createIndex( { "title" :1,"description" :-1} )
4、聚合
MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似 SQL 语句中的 count(*)
db.test.insertMany( [
{
title: 'MongoDB Overview' ,
description: 'MongoDB is no sql database' ,
by_user: 'runoob.com' ,
url: 'http://www.runoob.com' ,
tags: [ 'mongodb' , 'database' , 'NoSQL' ] ,
likes: 100
} ,
{
title: 'NoSQL Overview' ,
description: 'No sql database is very fast' ,
by_user: 'runoob.com' ,
url: 'http://www.runoob.com' ,
tags: [ 'mongodb' , 'database' , 'NoSQL' ] ,
likes: 10
} ,
{
title: 'Neo4j Overview' ,
description: 'Neo4j is no sql database' ,
by_user: 'Neo4j' ,
url: 'http://www.neo4j.com' ,
tags: [ 'neo4j' , 'database' , 'NoSQL' ] ,
likes: 750
}
] ) ;
db.test.aggregate( [ { $group : {
_id : "$by_user " ,
num_tutorial : { $sum : 1 }
} } ] )
常见聚合表达式
db.mycol.aggregate( [ { $group : { _id : "$by_user " , num_tutorial : { $sum : "$likes " } } } ] )
db.mycol.aggregate( [ { $group : { _id : "$by_user " , num_tutorial : { $avg : "$likes " } } } ] )
db.mycol.aggregate( [ { $group : { _id : "$by_user " , num_tutorial : { $min : "$likes " } } } ] )
db.mycol.aggregate( [ { $group : { _id : "$by_user " , num_tutorial : { $max : "$likes " } } } ] )
db.mycol.aggregate( [ { $group : { _id : "$by_user " , url : { $push : "$url " } } } ] )
db.mycol.aggregate( [ { $group : { _id : "$by_user " , url : { $addToSet : "$url " } } } ] )
db.mycol.aggregate( [ { $group : { _id : "$by_user " , first_url : { $first : "$url " } } } ] )
db.mycol.aggregate( [ { $group : { _id : "$by_user " , last_url : { $last : "$url " } } } ] )
三、应用整合
1、SpringBoot整合
1.1 环境配置
创建springboot工程羡慕,引入依赖
< dependency>
< groupId> org.springframework.boot groupId>
< artifactId> spring-boot-starter-data-mongodb artifactId>
dependency>
编写配置
# mongodb 没有开启任何安全协议
# mongodb(协议)://121.5.167.13(主机):27017(端口)/baizhi(库名)
spring.data.mongodb.uri=mongodb://192.168.31.167:27017/baizhi
# mongodb 存在密码
#spring.data.mongodb.host=shawn
#spring.data.mongodb.port=27017
#spring.data.mongodb.database=baizhi
#spring.data.mongodb.username=root
#spring.data.mongodb.password=root
1.2 集合操作
@Test
public void testCreateCollection ( ) {
mongoTemplate. createCollection ( "users" ) ;
}
@Test
public void testCreateCollection ( ) {
boolean isExist = mongoTemplate. collectionExists ( "products" ) ;
if ( ! isExist) {
mongoTemplate. createCollection ( "products" ) ;
}
}
@Test
public void testDropCollection ( ) {
mongoTemplate. dropCollection ( "products" ) ;
}
1.3 相关注解
Java–>对象–>JSON–>MongoDB
@Document 对应 类
修饰范围: 用在类上
作用: 用来映射这个类的一个对象为 mongo 中一条文档数据
属性:(value 、collection )用来指定操作的集合名称
@Id 对应 要指定为_id的变量名
修饰范围: 用在成员变量、方法上,只能出现一次
作用: 用来将成员变量的值映射为文档的_id 的值
@Field 对应 剩余变量名 (变量名都按照类中属性名定义时,可以不指定,即同名时可不指定)
修饰范围: 用在成员变量、方法上
作用: 用来将成员变量以及值映射为文档中一个key、value对
属性: ( name,value)用来指定在文档中 key 的名称,默认为成员变量名
@Transient 不参与文档转换
修饰范围: 用在成员变量、方法上
作用 : 用来指定改成员变量,不参与文档的序列化
mongoTemplate. insert ( new User ( 4 , "小wangb" , 22 , new Date ( ) ) , "db1" ) ;
mongoTemplate. save ( new User ( 1 , "小米" , 22 , new Date ( ) ) ) ;
mongoTemplate. insert ( Arrays . asList ( new User ( 2 , "小号" , 11 , new Date ( ) ) , new User ( 3 , "chiwan" , 99 , new Date ( ) ) ) , User . class ) ;
1.4 文档查询
mongoTemplate. findById ( 1 , User . class ) ;
mongoTemplate. findAll ( User . class ) ;
mongoTemplate. find ( Query . query ( Criteria . where ( "name" ) . is ( "小红" ) ) , User . class ) ;
mongoTemplate. find ( Query . query ( Criteria . where ( "age" ) . lt ( 33 ) ) , User . class ) ;
mongoTemplate. find ( Query . query ( Criteria . where ( "name" ) . is ( "小号" ) . and ( "age" ) . is ( 11 ) ) , User . class ) ;
Criteria criteria = new Criteria ( ) ;
criteria. orOperator ( Criteria . where ( "name" ) . is ( "小号" ) , Criteria . where ( "name" ) . is ( "小红" ) ) ;
mongoTemplate. find ( Query . query ( criteria) , User . class ) ;
mongoTemplate. find ( Query . query ( Criteria . where ( "age" ) . is ( 22 ) . orOperator ( Criteria . where ( "name" ) . is ( "小红" ) , criteria. where ( "name" ) . is ( "小wangb" ) ) ) , User . class ) ;
mongoTemplate. find ( new Query ( ) . with ( Sort . by ( Sort. Order . desc ( "age" ) ) ) , User . class ) ;
mongoTemplate. find ( new Query ( ) . with ( Sort . by ( Sort. Order . desc ( "age" ) ) ) . skip ( 3 ) . limit ( 2 ) , User . class ) ;
mongoTemplate. count ( new Query ( ) , User . class ) ;
mongoTemplate. findDistinct ( new Query ( ) , "age" , User . class , int . class ) ;
mongoTemplate. find ( new BasicQuery ( "{$or:[{age:22},{age:99}]}" , "{name:0}" ) , User . class ) ;
1.5 文档更新&删除
Query query = new Query ( Criteria . where ( "age" ) . is ( 44 ) ) ;
mongoTemplate. updateFirst ( query, new Update ( ) . set ( "age" , 33 ) . set ( "name" , "小王八" ) , User . class ) ;
mongoTemplate. updateMulti ( query, new Update ( ) . set ( "age" , 11 ) , User . class ) ;
UpdateResult age = mongoTemplate. upsert ( query, new Update ( ) . set ( "age" , 44 ) , User . class ) ;
System . out. println ( age. getModifiedCount ( ) ) ;
System . out. println ( age. getMatchedCount ( ) ) ;
System . out. println ( age. getUpsertedId ( ) ) ;
mongoTemplate. remove ( new Query ( Criteria . where ( "age" ) . is ( 44 ) ) , User . class ) ;
mongoTemplate. remove ( new Query ( ) , User . class ) ;
四、权限配置与可视化
1、概述
刚安装完毕的mongodb默认不使用权限认证方式启动,与MySQL不同,mongodb在安装的时候并没有设置权限,然而公网运行系统需要设置权限以保证数据安全。MongoDB是没有默认管理员账号,所以要先添加管理员账号,并且mongodb服务器需要在运行的时候开启验证模式
用户只能在用户所在数据库登录(创建用户的数据库),包括管理员账号。
管理员可以管理所有数据库,但是不能直接管理其他数据库,要先认证后才可以。
2、权限管理
2.1 创建账户
mongo
use admin
db.createUser( { "user" : "user" ,"pwd" : "password" ,"roles" :[ "root" ] } )
db.createUser(
{ user: "admin" ,
customData:{ description:"superuser" } ,
pwd: "admin" ,
roles: [ { role: "userAdminAnyDatabase" , db: "admin" } ]
}
)
db.createUser( {
user:"user001" ,
pwd:"123456" ,
customData:{
name:'shawn' ,
email:'[email protected] ' ,
age:18,
} ,
roles:[
{ role:"readWrite" ,db:"db001" } ,
{ role:"readWrite" ,db:"db002" } ,
'read' // 对其他数据库有只读权限,对db001、db002是读写权限
]
} )
2.2 账户常用操作
show users
db.system.users.find( )
db.runCommand( { usersInfo:"userName" } )
use admin
db.changeUserPassword( "username" , "xxx" )
db.runCommand(
{
updateUser:"username" ,
pwd:"xxx" ,
customData:{ title:"xxx" }
}
)
use admin
db.dropUser( 'user001' )
db.dropAllUser( )
use admin
db.auth( 'admin' ,'admin' )
use db001
2.3 权限启动认证
mongo --auth
auth = true
3、Docker启动认证
3.1 创建管理员
mkdir /mongo/data/
docker run --name linux-mongo -p 27017 :27017 -v /mongo/data:/data/db -d mongo
docker exec -it linux-mongo mongo admin
db.createUser( { user:'rootuser' ,pwd:'rootpassword' , roles: [ { role: "userAdminAnyDatabase" , db: "admin" } ] } ) ;
exit
docker stop linux-mongo
docker rm linux-mongo
3.2 创建 MongoDB 镜像 - 带验证
docker run --name linux-mongo -p 27017 :27017 -v /mongo/data:/data/db -d mongo --auth
docker exec -it linux-mongo mongo admin
db.auth( "rootuser" ,"rootpassword" ) ;
db.createUser( { user: 'testadmin' , pwd: 'testadmin123' , roles: [ { role: "root" , db: "admin" } ] } ) ;
db.auth( "testadmin" ,"testadmin123" ) ;
exit
show dbs;
show users ;
db.dropUser( "testadmin" )
4、MongoDB可视化
docker run -d \
--name mongo \
-v /home/docker/mongo/db:/data/db \
-p 27017 :27017 \
-e MONGO_INITDB_ROOT_USERNAME = admin \
-e MONGO_INITDB_ROOT_PASSWORD = 123456 \
--restart = always \
mongo:5.0
docker run -d \
--name mongo-express \
-p 8081 :8081 \
--link mongo \
-e ME_CONFIG_MONGODB_SERVER = '172.21.9.203' \
-e ME_CONFIG_MONGODB_ADMINUSERNAME = 'admin' \
-e ME_CONFIG_MONGODB_ADMINPASSWORD = '123456' \
-e ME_CONFIG_BASICAUTH_USERNAME = 'admin' \
-e ME_CONFIG_BASICAUTH_PASSWORD = 'admin123' \
--restart = always \
mongo-express:0.54
五、副本与集群
1、副本集
https://www.mongodb.com/docs/manual/replication/
1.1 概述
MongoDB 副本集(Replica Set)是有自动故障恢复功能的主从集群,有一个Primary节点和一个或多个Secondary节点组成。副本集没有固定的主节点,当主节点发生故障时整个集群会选举一个主节点为系统提供服务以保证系统的高可用。注意:这种方式并不能解决主节点的单点访问压力问题。
**注意:**当MongoDB副本集架构只剩一个节点时,整个节点是不可用的。单主不可写
1.2 自动故障转移
当主节点未与集合的其他成员通信超过配置的选举超时时间(默认为 10 秒)时,合格的辅助节点将调用选举以将自己提名为新的主节点。集群尝试完成新主节点的选举并恢复正常操作。
1.3 副本集搭建
mkdir -p rep1/data1
mkdir -p rep1/data2
mkdir -p rep1/data3
./mongod --port 27017 --dbpath .. /rep1/data1 --bind_ip 0.0 .0.0 --replSet myreplace/[ 1.14 .17.152:27018,1.14.17.152:27019]
./mongod --port 27018 --dbpath .. /rep1/data2 --bind_ip 0.0 .0.0 --replSet myreplace/[ 1.14 .17.152:27017,1.14.17.152:27019]
./mongod --port 27019 --dbpath .. /rep1/data3 --bind_ip 0.0 .0.0 --replSet myreplace/[ 1.14 .17.152:27018,1.14.17.152:27017]
use admin
var config = {
_id:"myreplace" ,
members:[
{ _id:0,host:"121.5.167.13:27017" } ,
{ _id:1,host:"121.5.167.13:27018" } ,
{ _id:2,host:"121.5.167.13:27019" } ]
}
rs.initiate( config) ; //初始化配置
rs.slaveOk( ) ; //旧的
rs.secondaryOk( ) ; //新的
还有一种方式是配置文件
netstat -lnp | grep 27017
cd /opt/home/
cp -r mongodb5.0.5/ mongodb1
cp -r mongodb5.0.5/ mongodb2
cp -r mongodb5.0.5/ mongodb3
mkdir -p /data/mongodb/data1
mkdir -p /data/mongodb/data2
mkdir -p /data/mongodb/data3
cd mongodb1/bin/
vim mongodb.conf
dbpath = /data/mongodb/data1
logpath = /data/mongodb/log1.log
port = 27018
fork = true
bind_ip = 0.0 .0.0
replSet = myreplace/[ 192.168 .200.128:27019,192.168.200.128:27020]
./mongo --port 27018
./mongo --port 27019
./mongo --port 27020
var config = {
_id:"myreplace" ,
members:[
{ _id:0,host:"192.168.200.128:27018" } ,
{ _id:1,host:"192.168.200.128:27019" } ,
{ _id:2,host:"192.168.200.128:27020" } ]
}
rs.initiate( config) ;
use test ;
db.test.insert( { _id:1, name:'java' } ) ;
db.test.find( ) ;
rs.slaveOk( ) ;
rs.secondaryOk( ) ;
db.test.find( ) ;
2、分片集群(sharing cluster)
https://www.mongodb.com/docs/manual/sharding/
2.1 概述
分片(sharding)是指将数据拆分,将其分散存在不同机器的过程 ,有时也用分区(partitioning)来表示这个概念,将数据分散在不同的机器上,不需要功能强大的大型计算机就能存储更多的数据,处理更大的负载。
分片目的是通过分片能够增加更多机器来应对不断的增加负载和数据,还不影响应用运行。MongoDB支持自动分片,可以摆脱手动分片的管理困扰,集群自动切分数据做负载均衡。
MongoDB分片的基本思想就是将集合拆分成多个块,这些快分散在若干个片里,每个片只负责总数据的一部分,应用程序不必知道哪些片对应哪些数据,甚至不需要知道数据拆分了,所以在分片之前会运行一个路由进程,mongos进程,这个路由器知道所有的数据存放位置,应用只需要直接与mongos交互即可。mongos自动将请求转到相应的片上获取数据,从应用角度看分不分片没有什么区别。
2.2 架构
Shard: 用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障
Config Server:mongod实例,存储了整个 ClusterMetadata
Query Routers: 前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用
Shard Key: 片键,设置分片时需要在集合中选一个键,用该键的值作为拆分数据的依据,这个片键称之为(shard key),片键的选取很重要,片键的选取决定了数据散列是否均匀
2.3 分片集群搭建
下面是原生安装集群,docker安装可以参考:Docker部署MongoDB分片+副本集集群(实战)
- Shard Server 1 :27017
- Shard Repl 1 :27018
- Shard Server 2 :27019
- Shard Repl 2 :27020
- Shard Server 3 :27021
- Shard Repl 3 :27022
- Config Server :27023
- Config Server :27024
- Config Server :27025
- Route Process :27026
mkdir -p /data/mongodb/shard/s0
mkdir -p /data/mongodb/shard/s0-repl
mkdir -p /data/mongodb/shard/s1
mkdir -p /data/mongodb/shard/s1-repl
mkdir -p /data/mongodb/shard/s2
mkdir -p /data/mongodb/shard/s2-repl
mkdir -p /data/mongodb/shard/config1
mkdir -p /data/mongodb/shard/config2
mkdir -p /data/mongodb/shard/config3
mkdir -p /data/mongodb/shard/config
启动6个 shard服务
./mongod --port 27017 --dbpath /data/mongodb/shard/s0 --bind_ip 0.0 .0.0 --shardsvr --replSet r0/123.57.80.91:27018 --fork --logpath /data/mongodb/shard/s0/s0.log
./mongod --port 27018 --dbpath /data/mongodb/shard/s0-repl --bind_ip 0.0 .0.0 --shardsvr --replSet r0/123.57.80.91:27017 --fork --logpath /data/mongodb/shard/s0-repl/s0-repl.log
./mongo --port 27017
use admin
config = {
_id:"r0" , members:[
{ _id:0,host:"123.57.80.91:27017" } ,
{ _id:1,host:"123.57.80.91:27018" }
]
}
rs.initiate( config) ;
./mongod --port 27019 --dbpath /data/mongodb/shard/s1 --bind_ip 0.0 .0.0 --shardsvr --replSet r1/123.57.80.91:27020 --fork --logpath /data/mongodb/shard/s1/s1.log
./mongod --port 27020 --dbpath /data/mongodb/shard/s1-repl --bind_ip 0.0 .0.0 --shardsvr --replSet r1/123.57.80.91:27019 --fork --logpath /data/mongodb/shard/s1-repl/s1-repl.log
./mongo --port 27019
use admin
config = {
_id:"r1" , members:[
{ _id:0,host:"123.57.80.91:27019" } ,
{ _id:1,host:"123.57.80.91:27020" }
]
}
rs.initiate( config) ;
./mongod --port 27021 --dbpath /data/mongodb/shard/s2 --bind_ip 0.0 .0.0 --shardsvr --replSet r2/123.57.80.91:27022 --fork --logpath /data/mongodb/shard/s2/s2.log
./mongod --port 27022 --dbpath /data/mongodb/shard/s2-repl --bind_ip 0.0 .0.0 --shardsvr --replSet r2/123.57.80.91:27021 --fork --logpath /data/mongodb/shard/s2-repl/s2-repl.log
./mongo --port 27017
use admin
config = {
_id:"r2" , members:[
{ _id:0,host:"123.57.80.91:27021" } ,
{ _id:1,host:"123.57.80.91:27022" }
]
}
rs.initiate( config) ;
启动3个config服务
./mongod --port 27023 --dbpath /data/mongodb/shard/config1 --bind_ip 0.0 .0.0 --replSet config/[ 123.57 .80.91:27024,123.57.80.91:27025] --configsvr --fork --logpath /data/mongodb/shard/config1/config.log
./mongod --port 27024 --dbpath /data/mongodb/shard/config2 --bind_ip 0.0 .0.0 --replSet config/[ 123.57 .80.91:27023,123.57.80.91:27025] --configsvr --fork --logpath /data/mongodb/shard/config2/config.log
./mongod --port 27025 --dbpath /data/mongodb/shard/config3 --bind_ip 0.0 .0.0 --replSet config/[ 123.57 .80.91:27023,123.57.80.91:27024] --configsvr --fork --logpath /data/mongodb/shard/config3/config.log
初始化 config server 副本集
./mongo --port 27023
use admin
config = {
_id:"config" ,
configsvr: true,
members:[
{ _id:0,host:"123.57.80.91:27023" } ,
{ _id:1,host:"123.57.80.91:27024" } ,
{ _id:2,host:"123.57.80.91:27025" }
]
}
rs.initiate( config) ;
启动 mongos 路由服务
./mongos --port 27026 --configdb config/123.57.80.91:27023,123.57.80.91:27024,123.57.80.91:27025 --bind_ip 0.0 .0.0 --fork --logpath /data/mongodb/shard/config/config.log
登录 mongos 服务
./mongo --port 27026
use admin
db.runCommand( { addshard:"r0/123.57.80.91:27017,123.57.80.91:27018" ,"allowLocal" :true } ) ;
db.runCommand( { addshard:"r1/123.57.80.91:27019,123.57.80.91:27020" ,"allowLocal" :true } ) ;
db.runCommand( { addshard:"r2/123.57.80.91:27021,123.57.80.91:27022" ,"allowLocal" :true } ) ;
db.runCommand( { enablesharding:"users" } ) ;
db.runCommand( { shardcollection: "users.user" , key: { _id:1} } ) ;
db.runCommand( { shardcollection: "users.emp" , key: { _id: "hashed" } } )
测试
./mongo --port 27026
use users ;
for( let i = 0 ; i< 1000 ; i++) {
db.user.insert( { _id:i, name:"java_" +i, age: i} ) ;
}
./mongo --port 27017
use users ;
db.user.count( ) ;
./mongo --port 27019
use users ;
db.user.count( ) ;
./mongo --port 27021
use users ;
db.user.count( ) ;
六、数据备份与恢复
https://www.mongodb.com/docs/database-tools/mongodump/
1、常规数据备份与恢复
1.1 备份 MongoDB 数据库(包括身份验证)
假设我们要备份一个名为 mydatabase
的 MongoDB 数据库,并将备份文件保存在 /backup
目录下。数据库的用户名是 myuser
,密码是 mypassword
,身份验证数据库是 admin
mongodump --host localhost --port 27017 --db mydatabase --username myuser --password mypassword --authenticationDatabase admin --out /backup
mongodump --host < hostname> --port < port> --db < database_name> --username < username> --password < password> --authenticationDatabase < auth_db> --out /backup
: MongoDB 主机名或 IP 地址
: MongoDB 端口,默认为 27017
: 要备份的数据库名称
: 用户名
: 用户密码
: 用户的身份验证数据库
/backup
: 备份文件输出目录
1.2 恢复 MongoDB 数据库(包括身份验证)
假设我们要从之前的备份文件恢复 mydatabase
数据库
mongorestore --host localhost --port 27017 --db mydatabase --username myuser --password mypassword --authenticationDatabase admin /backup/mydatabase
mongorestore --host < hostname> --port < port> --db < database_name> --username < username> --password < password> --authenticationDatabase < auth_db> /backup/< database_name>
: MongoDB 主机名或 IP 地址
: MongoDB 端口,默认为 27017
: 要恢复的数据库名称
: 用户名
: 用户密码
: 用户的身份验证数据库
/backup/
: 备份文件所在的目录
最后,基于docker的可以参考:基于docker的mongodump / mongorestore 备份恢复
你可能感兴趣的:(#,中间件,学习,笔记)
情绪觉察日记第37天
露露_e800
今天是家庭关系规划师的第二阶最后一天,慧萍老师帮我做了个案,帮我处理了埋在心底好多年的一份恐惧,并给了我深深的力量!这几天出来学习,爸妈过来婆家帮我带小孩,妈妈出于爱帮我收拾东西,并跟我先生和婆婆产生矛盾,妈妈觉得他们没有照顾好我…。今晚回家见到妈妈,我很欣赏她并赞扬她,妈妈说今晚要跟我睡我说好,当我们俩躺在床上准备睡觉的时候,我握着妈妈的手对她说:妈妈这几天辛苦你了,你看你多利害把我们的家收拾得
机器学习与深度学习间关系与区别
ℒℴѵℯ心·动ꦿ໊ོ꫞
人工智能 学习 深度学习 python
一、机器学习概述定义机器学习(MachineLearning,ML)是一种通过数据驱动的方法,利用统计学和计算算法来训练模型,使计算机能够从数据中学习并自动进行预测或决策。机器学习通过分析大量数据样本,识别其中的模式和规律,从而对新的数据进行判断。其核心在于通过训练过程,让模型不断优化和提升其预测准确性。主要类型1.监督学习(SupervisedLearning)监督学习是指在训练数据集中包含输入
铭刻于星(四十二)
随风至
69夜晚,绍敏同学做完功课后,看了眼房外,没听到动静才敢从书包的夹层里拿出那个心形纸团。折痕压得很深,都有些旧了,想来是已经写好很久了。绍敏同学慢慢地、轻轻地捏开折叠处,待到全部拆开后,又反复抚平纸张,然后仔细地一字字默看。只是开头的三个字是第一次看到,让她心漏跳了几拍。“亲爱的绍敏:从四年级的时候,我就喜欢你了,但是我一直不敢说,怕影响你学习。六年级的时候听说有人跟你表白,你接受了,我很难过,但
UI学习——cell的复用和自定义cell
Magnetic_h
ui 学习
目录cell的复用手动(非注册)自动(注册)自定义cellcell的复用在iOS开发中,单元格复用是一种提高表格(UITableView)和集合视图(UICollectionView)滚动性能的技术。当一个UITableViewCell或UICollectionViewCell首次需要显示时,如果没有可复用的单元格,则视图会创建一个新的单元格。一旦这个单元格滚动出屏幕,它就不会被销毁。相反,它被添
10月|愿你的青春不负梦想-读书笔记-01
Tracy的小书斋
本书的作者是俞敏洪,大家都很熟悉他了吧。俞敏洪老师是我行业的领头羊吧,也是我事业上的偶像。本日摘录他书中第一章中的金句:『一个人如果什么目标都没有,就会浑浑噩噩,感觉生命中缺少能量。能给我们能量的,是对未来的期待。第一件事,我始终为了进步而努力。与其追寻全世界的骏马,不如种植丰美的草原,到时骏马自然会来。第二件事,我始终有阶段性的目标。什么东西能给我能量?答案是对未来的期待。』读到这里的时候,我便
学点心理知识,呵护孩子健康
静候花开_7090
昨天听了华中师范大学教育管理学系副教授张玲老师的《哪里才是学生心理健康的最后庇护所,超越教育与技术的思考》的讲座。今天又重新学习了一遍,收获匪浅。张玲博士也注意到了当今社会上的孩子由于心理问题导致的自残、自杀及伤害他人等恶性事件。她向我们普及了一个重要的命题,她说心理健康的一些基本命题,我们与我们通常的一些教育命题是不同的,她还举了几个例子,让我们明白我们原来以为的健康并非心理学上的健康。比如如果
《投行人生》读书笔记
小蘑菇的树洞
《投行人生》----作者詹姆斯-A-朗德摩根斯坦利副主席40年的职业洞见-很短小精悍的篇幅,比较适合初入职场的新人。第一部分成功的职业生涯需要规划1.情商归为适应能力分享与协作同理心适应能力,更多的是自我意识,你有能力识别自己的情并分辨这些情绪如何影响你的思想和行为。2.对于初入职场的人的建议,细节,截止日期和数据很重要截止日期,一种有效的方法是请老板为你所有的任务进行优先级排序。和老板喝咖啡的好
消息中间件有哪些常见类型
xmh-sxh-1314
java
消息中间件根据其设计理念和用途,可以大致分为以下几种常见类型:点对点消息队列(Point-to-PointMessagingQueues):在这种模型中,消息被发送到特定的队列中,消费者从队列中取出并处理消息。队列中的消息只能被一个消费者消费,消费后即被删除。常见的实现包括IBM的MQSeries、RabbitMQ的部分使用场景等。适用于任务分发、负载均衡等场景。发布/订阅消息模型(Pub/Sub
ArcGIS栅格计算器常见公式(赋值、0和空值的转换、补充栅格空值)
研学随笔
arcgis 经验分享
我们在使用ArcGIS时通常经常用到栅格计算器,今天主要给大家介绍我日常中经常用到的几个公式,供大家参考学习。将特定值(-9999)赋值为0,例如-9999.Con("raster"==-9999,0,"raster")2.给空值赋予特定的值(如0)Con(IsNull("raster"),0,"raster")3.将特定的栅格值(如1)赋值为空值,其他保留原值SetNull("raster"==
【一起学Rust | 设计模式】习惯语法——使用借用类型作为参数、格式化拼接字符串、构造函数
广龙宇
一起学Rust # Rust设计模式 rust 设计模式 开发语言
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、使用借用类型作为参数二、格式化拼接字符串三、使用构造函数总结前言Rust不是传统的面向对象编程语言,它的所有特性,使其独一无二。因此,学习特定于Rust的设计模式是必要的。本系列文章为作者学习《Rust设计模式》的学习笔记以及自己的见解。因此,本系列文章的结构也与此书的结构相同(后续可能会调成结构),基本上分为三个部分
回溯 Leetcode 332 重新安排行程
mmaerd
Leetcode刷题学习记录 leetcode 算法 职场和发展
重新安排行程Leetcode332学习记录自代码随想录给你一份航线列表tickets,其中tickets[i]=[fromi,toi]表示飞机出发和降落的机场地点。请你对该行程进行重新规划排序。所有这些机票都属于一个从JFK(肯尼迪国际机场)出发的先生,所以该行程必须从JFK开始。如果存在多种有效的行程,请你按字典排序返回最小的行程组合。例如,行程[“JFK”,“LGA”]与[“JFK”,“LGB
Python数据分析与可视化实战指南
William数据分析
python python 数据
在数据驱动的时代,Python因其简洁的语法、强大的库生态系统以及活跃的社区,成为了数据分析与可视化的首选语言。本文将通过一个详细的案例,带领大家学习如何使用Python进行数据分析,并通过可视化来直观呈现分析结果。一、环境准备1.1安装必要库在开始数据分析和可视化之前,我们需要安装一些常用的库。主要包括pandas、numpy、matplotlib和seaborn等。这些库分别用于数据处理、数学
git常用命令笔记
咩酱-小羊
git 笔记
###用习惯了idea总是不记得git的一些常见命令,需要用到的时候总是担心旁边站了人~~~记个笔记@_@,告诉自己看笔记不丢人初始化初始化一个新的Git仓库gitinit配置配置用户信息gitconfig--globaluser.name"YourName"gitconfig--globaluser.email"
[email protected] "基本操作克隆远程仓库gitclone查看
2019-12-22-22:30
涓涓1016
今天是冬至,写下我的日更,是因为这两天的学习真的是能量的满满,让我看到了自己,未来另外一种可能性,也让我看到了这两年这几年的过程中我所接受那些痛苦的来源。一切的根源和痛苦都来自于人生,家庭,而你的原生家庭,你的爸爸和妈妈,是因为你这个灵魂在那一刻选择他们作为你的爸爸和妈妈来的,所以你得接受他,你得接纳他,他就是因为他的存在而给你的学习和成长带来这些痛苦,那其实是你必然要经历的这个过程,当你去接纳的
将cmd中命令输出保存为txt文本文件
落难Coder
Windows cmd window
最近深度学习本地的训练中我们常常要在命令行中运行自己的代码,无可厚非,我们有必要保存我们的炼丹结果,但是复制命令行输出到txt是非常麻烦的,其实Windows下的命令行为我们提供了相应的操作。其基本的调用格式就是:运行指令>输出到的文件名称或者具体保存路径测试下,我打开cmd并且ping一下百度:pingwww.baidu.com>./data.txt看下相同目录下data.txt的输出:如果你再
509. 斐波那契数(每日一题)
lzyprime
lzyprime博客(github)创建时间:2021.01.04qq及邮箱:2383518170leetcode笔记题目描述斐波那契数,通常用F(n)表示,形成的序列称为斐波那契数列。该数列由0和1开始,后面的每一项数字都是前面两项数字的和。也就是:F(0)=0,F(1)=1F(n)=F(n-1)+F(n-2),其中n>1给你n,请计算F(n)。示例1:输入:2输出:1解释:F(2)=F(1)+
拥有断舍离的心态,过精简生活--《断舍离》读书笔记
爱吃丸子的小樱桃
不知不觉间房间里的东西越来越多,虽然摆放整齐,但也时常会觉得空间逼仄,令人心生烦闷。抱着断舍离的态度,我开始阅读《断舍离》这本书,希望从书中能找到一些有效的方法,帮助我实现空间、物品上的断舍离。《断舍离》是日本作家山下英子通过自己的经历、思考和实践总结而成的,整体内涵也从刚开始的私人生活哲学的“断舍离”升华成了“人生实践哲学”,接着又成为每个人都能实行的“改变人生的断舍离”,从“哲学”逐渐升华成“
四章-32-点要素的聚合
彩云飘过
本文基于腾讯课堂老胡的课《跟我学Openlayers--基础实例详解》做的学习笔记,使用的openlayers5.3.xapi。源码见1032.html,对应的官网示例https://openlayers.org/en/latest/examples/cluster.htmlhttps://openlayers.org/en/latest/examples/earthquake-clusters.
高端密码学院笔记285
柚子_b4b4
高端幸福密码学院(高级班)幸福使者:李华第(598)期《幸福》之回归内在深层生命原动力基础篇——揭秘“激励”成长的喜悦心理案例分析主讲:刘莉一,知识扩充:成功=艰苦劳动+正确方法+少说空话。贪图省力的船夫,目标永远下游。智者的梦再美,也不如愚人实干的脚印。幸福早课堂2020.10.16星期五一笔记:1,重视和珍惜的前提是知道它的价值非常重要,当你珍惜了,你就真正定下来,真正的学到身上。2,大家需要
GitHub上克隆项目
bigbig猩猩
github
从GitHub上克隆项目是一个简单且直接的过程,它允许你将远程仓库中的项目复制到你的本地计算机上,以便进行进一步的开发、测试或学习。以下是一个详细的步骤指南,帮助你从GitHub上克隆项目。一、准备工作1.安装Git在克隆GitHub项目之前,你需要在你的计算机上安装Git工具。Git是一个开源的分布式版本控制系统,用于跟踪和管理代码变更。你可以从Git的官方网站(https://git-scm.
HTML网页设计制作大作业(div+css) 云南我的家乡旅游景点 带文字滚动
二挡起步
web前端期末大作业 web设计网页规划与设计 html css javascript dreamweaver 前端
Web前端开发技术描述网页设计题材,DIV+CSS布局制作,HTML+CSS网页设计期末课程大作业游景点介绍|旅游风景区|家乡介绍|等网站的设计与制作HTML期末大学生网页设计作业HTML:结构CSS:样式在操作方面上运用了html5和css3,采用了div+css结构、表单、超链接、浮动、绝对定位、相对定位、字体样式、引用视频等基础知识JavaScript:做与用户的交互行为文章目录前端学习路线
Day17笔记-高阶函数
~在杰难逃~
Python 笔记 python 开发语言 pycharm 数据分析
高阶函数【重点掌握】函数的本质:函数是一个变量,函数名是一个变量名,一个函数可以作为另一个函数的参数或返回值使用如果A函数作为B函数的参数,B函数调用完成之后,会得到一个结果,则B函数被称为高阶函数常用的高阶函数:map(),reduce(),filter(),sorted()1.map()map(func,iterable),返回值是一个iterator【容器,迭代器】func:函数iterab
Day1笔记-Python简介&标识符和关键字&输入输出
~在杰难逃~
Python python 开发语言 大数据 数据分析 数据挖掘
大家好,从今天开始呢,杰哥开展一个新的专栏,当然,数据分析部分也会不定时更新的,这个新的专栏主要是讲解一些Python的基础语法和知识,帮助0基础的小伙伴入门和学习Python,感兴趣的小伙伴可以开始认真学习啦!一、Python简介【了解】1.计算机工作原理编程语言就是用来定义计算机程序的形式语言。我们通过编程语言来编写程序代码,再通过语言处理程序执行向计算机发送指令,让计算机完成对应的工作,编程
人工智能时代,程序员如何保持核心竞争力?
jmoych
人工智能
随着AIGC(如chatgpt、midjourney、claude等)大语言模型接二连三的涌现,AI辅助编程工具日益普及,程序员的工作方式正在发生深刻变革。有人担心AI可能取代部分编程工作,也有人认为AI是提高效率的得力助手。面对这一趋势,程序员应该如何应对?是专注于某个领域深耕细作,还是广泛学习以适应快速变化的技术环境?又或者,我们是否应该将重点转向AI无法轻易替代的软技能?让我们一起探讨程序员
node.js学习
小猿L
node.js node.js 学习 vim
node.js学习实操及笔记温故node.js,node.js学习实操过程及笔记~node.js学习视频node.js官网node.js中文网实操笔记githubcsdn笔记为什么学node.js可以让别人访问我们编写的网页为后续的框架学习打下基础,三大框架vuereactangular离不开node.jsnode.js是什么官网:node.js是一个开源的、跨平台的运行JavaScript的运行
阶段总结反思
轻争
马上就要进入10月份了,今天做一下前段时间的总结和反思。前段时间,日更、英语、健身、护肤坚持的比较好。阅读、书法坚持的不好。1.中间被迫停更半个多月,其余时间一直在坚持日更挑战。偶尔也有不想写的时候,就做一下摘抄。因为阅读(输入)没跟上来,所以写作(输出)质量有待进一步加强。2.英语做到了一周至少学习5天,每次不少于30分钟,但是小班课没有跟上更新速度,下一步要争取利用零碎时间补听小班课。3.减肥
数据仓库——维度表一致性
墨染丶eye
背诵 数据仓库
数据仓库基础笔记思维导图已经整理完毕,完整连接为:数据仓库基础知识笔记思维导图维度一致性问题从逻辑层面来看,当一系列星型模型共享一组公共维度时,所涉及的维度称为一致性维度。当维度表存在不一致时,短期的成功难以弥补长期的错误。维度时确保不同过程中信息集成起来实现横向钻取货活动的关键。造成横向钻取失败的原因维度结构的差别,因为维度的差别,分析工作涉及的领域从简单到复杂,但是都是通过复杂的报表来弥补设计
ARM驱动学习之基础小知识
JT灬新一
ARM 嵌入式 arm开发 学习
ARM驱动学习之基础小知识•sch原理图工程师工作内容–方案–元器件选型–采购(能不能买到,价格)–原理图(涉及到稳定性)•layout画板工程师–layout(封装、布局,布线,log)(涉及到稳定性)–焊接的一部分工作(调试阶段板子的焊接)•驱动工程师–驱动,原理图,layout三部分的交集容易发生矛盾•PCB研发流程介绍–方案,原理图(网表)–layout工程师(gerber文件)–PCB板
ARM驱动学习之5 LEDS驱动
JT灬新一
嵌入式 C 底层 arm开发 学习 单片机
ARM驱动学习之5LEDS驱动知识点:•linuxGPIO申请函数和赋值函数–gpio_request–gpio_set_value•三星平台配置GPIO函数–s3c_gpio_cfgpin•GPIO配置输出模式的宏变量–S3C_GPIO_OUTPUT注意点:DRIVER_NAME和DEVICE_NAME匹配。实现步骤:1.加入需要的头文件://Linux平台的gpio头文件#include//三
ARM驱动学习之4小结
JT灬新一
嵌入式 C++ arm开发 学习 linux
ARM驱动学习之4小结#include#include#include#include#include#defineDEVICE_NAME"hello_ctl123"MODULE_LICENSE("DualBSD/GPL");MODULE_AUTHOR("TOPEET");staticlonghello_ioctl(structfile*file,unsignedintcmd,unsignedlo
深入浅出Java Annotation(元注解和自定义注解)
Josh_Persistence
Java Annotation 元注解 自定义注解
一、基本概述
Annontation是Java5开始引入的新特征。中文名称一般叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。
更通俗的意思是为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且是供指定的工具或
mysql优化特定类型的查询
annan211
java 工作 mysql
本节所介绍的查询优化的技巧都是和特定版本相关的,所以对于未来mysql的版本未必适用。
1 优化count查询
对于count这个函数的网上的大部分资料都是错误的或者是理解的都是一知半解的。在做优化之前我们先来看看
真正的count()函数的作用到底是什么。
count()是一个特殊的函数,有两种非常不同的作用,他可以统计某个列值的数量,也可以统计行数。
在统
MAC下安装多版本JDK和切换几种方式
棋子chessman
jdk
环境:
MAC AIR,OS X 10.10,64位
历史:
过去 Mac 上的 Java 都是由 Apple 自己提供,只支持到 Java 6,并且OS X 10.7 开始系统并不自带(而是可选安装)(原自带的是1.6)。
后来 Apple 加入 OpenJDK 继续支持 Java 6,而 Java 7 将由 Oracle 负责提供。
在终端中输入jav
javaScript (1)
Array_06
JavaScript java 浏览器
JavaScript
1、运算符
运算符就是完成操作的一系列符号,它有七类: 赋值运算符(=,+=,-=,*=,/=,%=,<<=,>>=,|=,&=)、算术运算符(+,-,*,/,++,--,%)、比较运算符(>,<,<=,>=,==,===,!=,!==)、逻辑运算符(||,&&,!)、条件运算(?:)、位
国内顶级代码分享网站
袁潇含
java jdk oracle .net PHP
现在国内很多开源网站感觉都是为了利益而做的
当然利益是肯定的,否则谁也不会免费的去做网站
&
Elasticsearch、MongoDB和Hadoop比较
随意而生
mongodb hadoop 搜索引擎
IT界在过去几年中出现了一个有趣的现象。很多新的技术出现并立即拥抱了“大数据”。稍微老一点的技术也会将大数据添进自己的特性,避免落大部队太远,我们看到了不同技术之间的边际的模糊化。假如你有诸如Elasticsearch或者Solr这样的搜索引擎,它们存储着JSON文档,MongoDB存着JSON文档,或者一堆JSON文档存放在一个Hadoop集群的HDFS中。你可以使用这三种配
mac os 系统科研软件总结
张亚雄
mac os
1.1 Microsoft Office for Mac 2011
大客户版,自行搜索。
1.2 Latex (MacTex):
系统环境:https://tug.org/mactex/
&nb
Maven实战(四)生命周期
AdyZhang
maven
1. 三套生命周期 Maven拥有三套相互独立的生命周期,它们分别为clean,default和site。 每个生命周期包含一些阶段,这些阶段是有顺序的,并且后面的阶段依赖于前面的阶段,用户和Maven最直接的交互方式就是调用这些生命周期阶段。 以clean生命周期为例,它包含的阶段有pre-clean, clean 和 post
Linux下Jenkins迁移
aijuans
Jenkins
1. 将Jenkins程序目录copy过去 源程序在/export/data/tomcatRoot/ofctest-jenkins.jd.com下面 tar -cvzf jenkins.tar.gz ofctest-jenkins.jd.com &
request.getInputStream()只能获取一次的问题
ayaoxinchao
request Inputstream
问题:在使用HTTP协议实现应用间接口通信时,服务端读取客户端请求过来的数据,会用到request.getInputStream(),第一次读取的时候可以读取到数据,但是接下来的读取操作都读取不到数据
原因: 1. 一个InputStream对象在被读取完成后,将无法被再次读取,始终返回-1; 2. InputStream并没有实现reset方法(可以重
数据库SQL优化大总结之 百万级数据库优化方案
BigBird2012
SQL优化
网上关于SQL优化的教程很多,但是比较杂乱。近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充。
这篇文章我花费了大量的时间查找资料、修改、排版,希望大家阅读之后,感觉好的话推荐给更多的人,让更多的人看到、纠正以及补充。
1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
2.应尽量避免在 where
jsonObject的使用
bijian1013
java json
在项目中难免会用java处理json格式的数据,因此封装了一个JSONUtil工具类。
JSONUtil.java
package com.bijian.json.study;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
[Zookeeper学习笔记之六]Zookeeper源代码分析之Zookeeper.WatchRegistration
bit1129
zookeeper
Zookeeper类是Zookeeper提供给用户访问Zookeeper service的主要API,它包含了如下几个内部类
首先分析它的内部类,从WatchRegistration开始,为指定的znode path注册一个Watcher,
/**
* Register a watcher for a particular p
【Scala十三】Scala核心七:部分应用函数
bit1129
scala
何为部分应用函数?
Partially applied function: A function that’s used in an expression and that misses some of its arguments.For instance, if function f has type Int => Int => Int, then f and f(1) are p
Tomcat Error listenerStart 终极大法
ronin47
tomcat
Tomcat报的错太含糊了,什么错都没报出来,只提示了Error listenerStart。为了调试,我们要获得更详细的日志。可以在WEB-INF/classes目录下新建一个文件叫logging.properties,内容如下
Java代码
handlers = org.apache.juli.FileHandler, java.util.logging.ConsoleHa
不用加减符号实现加减法
BrokenDreams
实现
今天有群友发了一个问题,要求不用加减符号(包括负号)来实现加减法。
分析一下,先看最简单的情况,假设1+1,按二进制算的话结果是10,可以看到从右往左的第一位变为0,第二位由于进位变为1。
 
读《研磨设计模式》-代码笔记-状态模式-State
bylijinnan
java 设计模式
声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/
/*
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类
状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况
把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化
如果在
CUDA程序block和thread超出硬件允许值时的异常
cherishLC
CUDA
调用CUDA的核函数时指定block 和 thread大小,该大小可以是dim3类型的(三维数组),只用一维时可以是usigned int型的。
以下程序验证了当block或thread大小超出硬件允许值时会产生异常!!!GPU根本不会执行运算!!!
所以验证结果的正确性很重要!!!
在VS中创建CUDA项目会有一个模板,里面有更详细的状态验证。
以下程序在K5000GPU上跑的。
诡异的超长时间GC问题定位
chenchao051
jvm cms GC hbase swap
HBase的GC策略采用PawNew+CMS, 这是大众化的配置,ParNew经常会出现停顿时间特别长的情况,有时候甚至长到令人发指的地步,例如请看如下日志:
2012-10-17T05:54:54.293+0800: 739594.224: [GC 739606.508: [ParNew: 996800K->110720K(996800K), 178.8826900 secs] 3700
maven环境快速搭建
daizj
安装 mavne 环境配置
一 下载maven
安装maven之前,要先安装jdk及配置JAVA_HOME环境变量。这个安装和配置java环境不用多说。
maven下载地址:http://maven.apache.org/download.html,目前最新的是这个apache-maven-3.2.5-bin.zip,然后解压在任意位置,最好地址中不要带中文字符,这个做java 的都知道,地址中出现中文会出现很多
PHP网站安全,避免PHP网站受到攻击的方法
dcj3sjt126com
PHP
对于PHP网站安全主要存在这样几种攻击方式:1、命令注入(Command Injection)2、eval注入(Eval Injection)3、客户端脚本攻击(Script Insertion)4、跨网站脚本攻击(Cross Site Scripting, XSS)5、SQL注入攻击(SQL injection)6、跨网站请求伪造攻击(Cross Site Request Forgerie
yii中给CGridView设置默认的排序根据时间倒序的方法
dcj3sjt126com
GridView
public function searchWithRelated() {
$criteria = new CDbCriteria;
$criteria->together = true; //without th
Java集合对象和数组对象的转换
dyy_gusi
java集合
在开发中,我们经常需要将集合对象(List,Set)转换为数组对象,或者将数组对象转换为集合对象。Java提供了相互转换的工具,但是我们使用的时候需要注意,不能乱用滥用。
1、数组对象转换为集合对象
最暴力的方式是new一个集合对象,然后遍历数组,依次将数组中的元素放入到新的集合中,但是这样做显然过
nginx同一主机部署多个应用
geeksun
nginx
近日有一需求,需要在一台主机上用nginx部署2个php应用,分别是wordpress和wiki,探索了半天,终于部署好了,下面把过程记录下来。
1. 在nginx下创建vhosts目录,用以放置vhost文件。
mkdir vhosts
2. 修改nginx.conf的配置, 在http节点增加下面内容设置,用来包含vhosts里的配置文件
#
ubuntu添加admin权限的用户账号
hongtoushizi
ubuntu useradd
ubuntu创建账号的方式通常用到两种:useradd 和adduser . 本人尝试了useradd方法,步骤如下:
1:useradd
使用useradd时,如果后面不加任何参数的话,如:sudo useradd sysadm 创建出来的用户将是默认的三无用户:无home directory ,无密码,无系统shell。
顾应该如下操作:
第五章 常用Lua开发库2-JSON库、编码转换、字符串处理
jinnianshilongnian
nginx lua
JSON库
在进行数据传输时JSON格式目前应用广泛,因此从Lua对象与JSON字符串之间相互转换是一个非常常见的功能;目前Lua也有几个JSON库,本人用过cjson、dkjson。其中cjson的语法严格(比如unicode \u0020\u7eaf),要求符合规范否则会解析失败(如\u002),而dkjson相对宽松,当然也可以通过修改cjson的源码来完成
Spring定时器配置的两种实现方式OpenSymphony Quartz和java Timer详解
yaerfeng1989
timer quartz 定时器
原创整理不易,转载请注明出处:Spring定时器配置的两种实现方式OpenSymphony Quartz和java Timer详解
代码下载地址:http://www.zuidaima.com/share/1772648445103104.htm
有两种流行Spring定时器配置:Java的Timer类和OpenSymphony的Quartz。
1.Java Timer定时
首先继承jav
Linux下df与du两个命令的差别?
pda158
linux
一、df显示文件系统的使用情况,与du比較,就是更全盘化。 最经常使用的就是 df -T,显示文件系统的使用情况并显示文件系统的类型。 举比例如以下: [root@localhost ~]# df -T Filesystem Type &n
[转]SQLite的工具类 ---- 通过反射把Cursor封装到VO对象
ctfzh
VO android sqlite 反射 Cursor
在写DAO层时,觉得从Cursor里一个一个的取出字段值再装到VO(值对象)里太麻烦了,就写了一个工具类,用到了反射,可以把查询记录的值装到对应的VO里,也可以生成该VO的List。
使用时需要注意:
考虑到Android的性能问题,VO没有使用Setter和Getter,而是直接用public的属性。
表中的字段名需要和VO的属性名一样,要是不一样就得在查询的SQL中
该学习笔记用到的Employee表
vipbooks
oracle sql 工作
这是我在学习Oracle是用到的Employee表,在该笔记中用到的就是这张表,大家可以用它来学习和练习。
drop table Employee;
-- 员工信息表
create table Employee(
-- 员工编号
EmpNo number(3) primary key,
-- 姓