表
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 备份恢复
你可能感兴趣的:(#,中间件,学习,笔记)
【LLM】大模型基础--大规模预训练语言模型的开源教程笔记
Langchain
笔记 人工智能 langchain llama 大模型 产品经理 大模型基础
1.引言本文以DataWhale大模型开源教程为学习路线,进行一整个大模型的入门操作什么是语言模型语言模型是一种对词元序列(token)的概率分布,可以用于评估文本序列的合理性并生成新的文本。从生成文本的方式来看,LM(languagemodle)可以简单的分为:自回归模型非自回归模型特点逐字生成文本,每个词的生成都依赖于上文,关联性好一次性生成整个文本序列,不捕捉上文信息优点内容质量高生成速度快
【含文档+PPT+源码】基于微信小程序的乡村振兴民宿管理系统
小咕聊编程
微信小程序 小程序
项目介绍本课程演示的是一款基于微信小程序的乡村振兴民宿管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。1.包含:项目源码、项目文档、数据库脚本、软件工具等所有资料2.带你从零开始部署运行本套系统3.该项目附带的源码资料可作为毕设使用民宿管理系统的重要核心功能包括用户管理、客房管理、客房评价管理、订单管理、首页轮播图管理和商家管理等,以下为项目功能模块图:技术栈
从热搜趋势到交易策略:Level2逐笔成交数据的应用之道
银河金融数据库
level2逐笔成交逐笔委托 区块链 金融 数据库 python
从热搜趋势到交易策略:Level2逐笔成交数据的应用之道为了促进学习和研究,我们在此分享一部分匿名处理的股票level2逐笔委托逐笔成交历史行情数据集。股票level2逐笔委托逐笔成交历史行情数据集链接:https://pan.baidu.com/s/1jSeHGNOs8akYsFfjs9WMSw?pwd=crfj提取码:crfj请注意,分享这些数据的目的是为了教育和研究,不构成任何投资建议。关键
Matlab 机器人 雅可比矩阵
CodingAlgo
算法
===工业机器人运动学与Matlab正逆解算法学习笔记(用心总结一文全会)(四)——雅可比矩阵_staubli机器人正逆向运动学实例验证matlab-CSDN博客===matlab求雅可比矩阵_六轴机械臂矢量积法求解雅可比矩阵-CSDN博客===(63封私信/80条消息)MATLAB机器人工具箱中机器人逆解是如何求出来的?-知乎===https://zhuanlan.zhihu.com/p/638
【AI日记】24.10.30 做项目的一些前期准备工作
AI完全体
AI日记 人工智能 机器学习 自然语言处理 langchain 日记 读书 学习资源
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】工作工作1内容:看AI大佬访谈B站地址:SamAltman最新5月播客长篇访谈|@All-In播客2024.5.11时间:1.5小时评估:继续工作2内容:思考如何开始自己的RAG项目时间:0.5小时决定:采用搭积木的方法来做自己的RAG项目。从最基础的开始,不断学习各种RAG和NLP相关的技术,然后不断加入到自己的项目中,而不
计算机视觉如何快速入门?
Frunze软件开发
日常问题回答 开发语言 计算机视觉 工业异常检测 论文
目录1.明确研究方向2.学习基础知识3.掌握核心算法4.实践项目5.阅读文献6.复现经典论文7.改进与创新总结计算机视觉(ComputerVision)是一个复杂且广泛的领域,尤其是工业异常检测这种特定方向,需要结合理论知识和实践技能。以下是一些具体的、可操作的建议,也是个人实际路径的一个总结,希望可以帮助到你快速入门并完成一篇论文。1.明确研究方向-工业异常检测的核心是识别图像或视频中的异常区域
强化学习在连续动作空间的应用:DDPG与TD3
AI天才研究院
计算 AI大模型应用入门实战与进阶 大数据 人工智能 语言模型 AI LLM Java Python 架构设计 Agent RPA 计算 AI大模型应用
1.背景介绍1.1强化学习简介强化学习(ReinforcementLearning,简称RL)是一种机器学习方法,它通过让智能体(Agent)在环境(Environment)中与环境进行交互,学习如何根据观察到的状态(State)选择动作(Action),以最大化某种长期累积奖励(Reward)的方法。强化学习的核心问题是学习一个策略(Policy),即在给定状态下选择动作的映射关系。1.2连续动
书籍-《机器学习的秘密:它是如何工作的以及它对你的意义》
机器学习深度学习人工智能
书籍:SecretsOfMachineLearning:HowItWorksAndWhatItMeansForYou作者:TomKohn出版:WorldScientificPublishingCoPteLtd编辑:陈萍萍的公主@一点人工一点智能下载:书籍下载-《机器学习的秘密:它是如何工作的以及它对你的意义》01书籍介绍在众多关于机器学习和人工智能的技术文献及充满恐慌的书籍中,《机器学习的秘密》犹
C#学习笔记——StringBuilder类
oyqho
C#官方文档学习笔记 c# 游戏 unity
在C#中,有一个非常实用的创建字符型数据的类——StringBuilder类,使用StringBuilder,可以创建出字符串,并且StringBuilder中封装的有许多对字符串进行操作的方法(这一点很方便)。比如说字符串是固定长度的,但是通过StringBuilder类中的Append()方法就可以改变字符串的长度。StringBuilder类的使用需要在前面加上System.Text。代码如
ROS2软件架构全面解析-学习如何设计通信中间件框架
chinamaoge
ROS2 DDS 通信中间件 ROS2 ROS 通信中间件
前言ROS(RobotOperatingSystem)2是一个用于开发机器人应用的软件平台,也称为机器人软件开发工具包(SDK)。ROS2是ROS1的迭代升级版本,最主要的升级点是引入DDS(DataDistributionService)为基础的底层通信系统。为解决ROS1存在主要几个缺陷:为解决一个主节点通信故障(ROSMaster),需要对所有现有的Client库进行单独的补丁处理,并且每个
C++调用CPLEX踩过的小坑~
blackms1023
c++
最近在使用VisualStudio2015调用CPLEX进行一些基础问题的求解,初学小白,完全没经验,遇到N多问题,踩了好多坑,在此分享一下!希望可以给后其他研究者提供一neinei学习的经验!1.关于CPLEX中默认变量的问题CPLEX中默认变量为非负值,故在实际编码过程中如若不为变量指定下界为负无穷,且变量存在负值情况,则会出现计算数据错误的情况。具体解决方法就是在初始化的过程中,为其指定一个
一键启动多个软件,开启高效办公新时代
KJ-拾荒者
生活 职场和发展 性能优化 经验分享 安全
在快节奏的现代生活中,我们的电脑上安装了各种各样的软件,从办公软件到娱乐软件,从社交软件到学习软件。然而,每次打开电脑后,逐一启动这些软件不仅浪费时间,还会影响我们的心情和工作效率。今天,我要为大家介绍一款能够解决这一问题的神奇软件——一键启动多个软件,它将彻底改变你的电脑使用体验。一、高效便捷,一键启动这款软件的最大亮点就是它的高效便捷性。你可以将常用的软件添加到启动列表中,然后只需轻轻一点,就
学C++还是学Java?做软件研发还需掌握哪些知识和技能?_c+
2401_84160087
程序员 c++ java c语言
1.1、Java和C++都很有前途1.2、Java的应用领域与使用场景1.3、C++的应用领域与使用场景1.4、如何选择2、需要掌握的知识和技能2.1、掌握一些基础的网络知识2.2、熟悉一些常用的SQL语句2.3、了解Linux系统,掌握常用的Linux命令2.4、学习汇编语言相关的内容2.5、学习一些其他的专业课程3、最后最近和一些高校的学生朋友交流,他们打算毕业后从事软件研发的工作,但目前有些
python小白的word转excel
W~J~L
python python
大概流程为:一、首先导入docx库以及xlwt库二、需要用到的文档的名称三、设置一个函数来写入excel,转为可识别通用的“utf8”,然后创建一个表格来将文档里的内容写入到表里去四、利用for循坏来设置表里多少个为一行五、在最后设置表的保存路径以及提示是否创建成功importdocximportxlwtdocFile="青年大学习.docx"defwrite_excel(path):doc=do
基于C语言的单向链表按“索引”插入或者删除某节点实现
張三600
c语言 链表 数据结构
正文在学习学堂在线西安科技大学的数据结构与算法课程后,我基于课程的伪代码实现了单向链表的插入和删除操作。以下代码展示了如何建立一个带有一个空数据头结点和五个数据节点的单向链表,以及如何在链表的指定索引位置插入和删除节点。以下是完整的代码实现:#include#include//结构体声明typedefstructLNode{intdata;//链表节点数据域structLNode*next;//链
python 学习曲线函数_如何使用学习曲线来诊断你的LSTM模型的行为?(附代码)...
weixin_39576066
python 学习曲线函数
LSTM是一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要事件。在自然语言处理、语言识别等一系列的应用上都取得了很好的效果。《LongShortTermMemoryNetworkswithPython》是澳大利亚机器学习专家JasonBrownlee的著作,里面详细介绍了LSTM模型的原理和使用。该书总共分为十四个章节,具体如下:第一章:什么是LSTMs?第二章:怎么样训练
揭秘!考 BDA 所需强度指南
东总学长同济预备研0
数据分析 信息可视化 python 求职招聘
宝子们,初级BDA我已顺利拿下~迫不及待来和大家分享热乎乎的备考历程,希望能给正在备考或打算考的小伙伴一些参考。我选择BDA数据分析师证书,是因为它由中国信息协会市场研究业分会&中经数(北京)数据应用技术研究院联合认证,对想进入数据分析行业、提升专业水平的人超有帮助!下面给大家分享我的学习攻略:业务知识(1周左右)深入了解业务知识,能为数据分析提供更深层次支持。推荐书籍《深入浅出数据分析》《精益数
翻译Deep Learning and the Game of Go(14)第十二章 采用actor-critic方法的强化学习
idol_watch
围棋与深度学习
本章包括:利用优势使强化学习更有效率用actor-critic方法来实现自我提升AI设计和训练Keras的多输出神经网络如果你正在学习下围棋,最好的改进方法之一是让一个水平更高的棋手给你复盘。有时候,最有用的反馈只是指出你在哪里赢棋或输棋。复盘的人可能会给出这样的评论,“你下了30步后已经远远落后了”或“在下了110步后,你有一个获胜的局面,但你的对手在130时扭转了局面。”为什么这种反馈是有帮助
PHP语法完全入门指南:从零开始掌握动态网页
生信天地
php 开发语言
本文专为零基础新手设计,通过5000字详细讲解带你系统学习PHP语法。包含环境搭建、基础语法、实战案例,并附20+代码示例。阅读后你将能独立开发简单动态网页!一、PHP开发环境搭建(新手必看)1.1为什么需要搭建环境?PHP是服务器端脚本语言,需要运行在服务器环境中。推荐使用集成环境一键安装:Windows用户:下载PHPStudy(文献1)Mac用户:推荐MAMP通用选择:XAMPP(文献1)安
transformer概述
沉墨的夜
transformer 深度学习 人工智能
Transformer架构的提出,不仅在自然语言处理(NLP)领域掀起了革命,也在多个深度学习任务中获得了广泛应用。自2017年由Vaswani等人提出以来,Transformer经历了多次优化和扩展,成为深度学习领域的基石。以下是Transformer架构的演进历程、作用和意义、架构详情以及未来发展趋势的详细阐述。Transformer架构的演进历程(1)Transformer的起源(2017年
Ajax基础学习
喜欢代码的新之助
ajax 学习 okhttp
AJAX浏览器本身就具备网络通信的能力,但在早期浏览器并没有把这个能力开放给JS最早是微软在IE浏览器中把这一能力向JS开放,让JS可以在代码中实现发送请求,这项技术在2005年被正式命名为AJAX(AsynchronousJavascriptAndXML)这套API主要依靠一个构造函数完成;该构造函数的名称为XMLHttpRequest,简称为XHR由于XHRAPI有着诸多缺陷,在HTML5和E
【漫话机器学习系列】041.信息丢失(dropout)
IT古董
漫话机器学习系列专辑 机器学习 人工智能 深度学习
信息丢失(Dropout)Dropout是一种广泛应用于神经网络训练中的正则化技术,旨在减少过拟合(overfitting),提高模型的泛化能力。虽然"信息丢失"(dropout)这个术语在某些情况下可能引起误解,指的并非是数据的丢失,而是训练过程中故意“丢弃”神经网络中的部分神经元。这种做法可以避免模型过于依赖于某些特定的神经元,从而提高模型在新数据上的表现。Dropout的工作原理在神经网络的
PySide6 GUI 学习笔记——常用类及控件使用方法(常用类尺寸QSize)
Humbunklung
PySide6 学习笔记 学习 笔记 python pyqt
尺寸类之——QSizeQSize类通过整数形式定义一个二维对象的尺寸,包括宽width()和高height()。QSize官方文档方法概述def__init__()def__reduce__()def__repr__()defboundedTo()defexpandedTo()defgrownBy()defheight()defisEmpty()defisNull()defisValid()def
第二章:12.3 建立表现基准
望云山190
基准性能水平 人工智能 机器学习
背景介绍语音识别是一种常见的机器学习应用,用户通过语音输入代替键盘输入,系统需要将语音转换为文本。在这个过程中,算法的性能可以通过训练误差和交叉验证误差来评估。误差定义训练误差(Jtrain):指算法在训练数据集上无法正确转录的音频片段的百分比。在这个例子中,训练误差是10.8%,意味着算法在训练数据上犯了10.8%的错误。交叉验证误差(Jcv):指算法在未见过的数据(交叉验证集)上无法正确转录的
第二章:12.4 学习曲线
望云山190
深度学习 机器学习 人工智能
学习曲线的基本概念学习曲线是展示机器学习模型性能如何随着训练数据量增加而变化的图表。它们可以帮助我们理解模型在不同数据量下的表现,以及模型是否过拟合或欠拟合。二阶模型的学习曲线交叉验证错误(Jcv):这条绿色曲线表示模型在未见过的数据上的表现。它反映了模型的泛化能力,即模型对新数据的预测能力。训练错误(Jtrain):这条红色曲线表示模型在训练数据上的表现。它反映了模型对训练数据的拟合程度。学习曲
Pytorch官方文档英语翻译
yanzhiwen2
深度学习Pyrotch pytorch 机器学习 python 人工智能 深度学习
深度学习Pytorch-Pytorch官方文档英语翻译1.a-e1.1span跨度1.2blended混合的1.3criterion标准1.4deprecated弃用的1.5clamp钳制1.6arbitraryshapes任意形状1.7explodinggradients梯度爆炸1.8converge收敛1.9approximate近似1.10arg参数1.11argument参数1.12con
【探索C++】友元
祐言QAQ
探索C++编程 开发语言 c++ linux java https 网络
(꒪ꇴ꒪),Hello我是祐言QAQ我的博客主页:C/C++语言,数据结构,Linux基础,ARM开发板,网络编程等领域UP快上,一起学习,让我们成为一个强大的攻城狮!送给自己和读者的一句鸡汤:集中起来的意志可以击穿顽石!作者水平很有限,如果发现错误,请在评论区指正,感谢在C++中,友元(friend)是一种特殊的关系,它允许一个类或函数访问另一个类的私有成员。通过友元关系,一个类可以将其他类或函
嵌入式工程师全攻略:岗位职责与技能要求详解
Nebula嵌入式
嵌入式科普 嵌入式
文章目录一、前言二、**硬件架构中最常用的有哪几种**三、嵌入式的岗位及技能要求3.1嵌入式硬件3.1.1主要职责3.1.2技能要求3.1.3学习建议3.2嵌入式单片机3.2.1主要职责3.2.2技能要求3.2.3学习建议3.3嵌入式linux3.3.1主要职责3.3.2技能要求3.3.3学习建议一、前言这是根据我个人和网上的一些资料编写的,可能有不对的地方请及时提醒。二、硬件架构中最常用的有哪几
图论- Dijkstra算法
左灯右行的爱情
图论 算法 python
Dijkstra算法前言概念BFS基础模版DijkstraDijkstra函数签名State类distTo记录最短路径伪代码模版第一个问题解答第二个问题解答第三个问题解答前言学习这个算法之间,必须要对BFS遍历比较熟悉,它的本质就是一个特殊改造过的BFS算法.概念Dijkstra算法是一种计算图中单源最短路径算法,本质上是一个经过特殊改造的BFS算法,改造点有两个:使用优先队列,而不是普通队列进行
【OSTEP】操作系统导论-精翻讲解:第五章-进程API
Refulic.
linux 运维 服务器
写在前面:学习操作系统是一个漫长且容易迷茫的过程。这本书在我的学习过程中给予了很大的帮助。本文将尽量精简内容,仅保留关键部分,并对学习中遇到的难点进行注释和解释。希望这能为初学者提供一些帮助和指引。本文所有涉及的图片及内容皆引用自:OperatingSystems:ThreeEasyPieces作者:RemziH.Arpaci-DusseauandAndreaC.Arpaci-Dusseau(Un
深入浅出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,
-- 姓