mongodb 基础知识

mongodb 基础知识

运行环境

  • CentOS Linux release 7.2.1511 (Core)

安装

  • wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-3.2.9.tgz
  • tar -zxvf mongodb-linux-x86_64-rhel70-3.2.9.tgz
  • mv mongodb-linux-x86_64-rhel70-3.2.9 /usr/local/mongodb
  • 添加到环境变量

vi ~/.bashrc

加入:
export PATH=/usr/local/mongodb/bin:$PATH

使环境变量生效
source ~/.bashrc

  • 启动

启动前先创建数据库默认存储路径,否则会报错。mkdir -p /data/db

[root@localhost bin]# mongod
2016-08-19T22:14:07.426+0800 I CONTROL  [initandlisten] MongoDB starting : pid=6611 port=27017 dbpath=/data/db 64-bit host=localhost.localdomain
2016-08-19T22:14:07.427+0800 I CONTROL  [initandlisten] db version v3.2.9
2016-08-19T22:14:07.427+0800 I CONTROL  [initandlisten] git version: 22ec9e93b40c85fc7cae7d56e7d6a02fd811088c
2016-08-19T22:14:07.427+0800 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
2016-08-19T22:14:07.428+0800 I CONTROL  [initandlisten] allocator: tcmalloc
2016-08-19T22:14:07.428+0800 I CONTROL  [initandlisten] modules: none
2016-08-19T22:14:07.428+0800 I CONTROL  [initandlisten] build environment:
2016-08-19T22:14:07.428+0800 I CONTROL  [initandlisten]     distmod: rhel70
2016-08-19T22:14:07.429+0800 I CONTROL  [initandlisten]     distarch: x86_64
2016-08-19T22:14:07.429+0800 I CONTROL  [initandlisten]     target_arch: x86_64
2016-08-19T22:14:07.429+0800 I CONTROL  [initandlisten] options: {}
2016-08-19T22:14:07.470+0800 I STORAGE  [initandlisten] exception in initAndListen: 29 Data directory /data/db not found., terminating
2016-08-19T22:14:07.471+0800 I CONTROL  [initandlisten] dbexit:  rc: 100
[root@localhost bin]# mkdir -p /data/db

启动:mongod

概念区分

SQL术语/概念 MongoDB术语/概念 解释/说明
database database 数据库
table collection 数据库表/集合
row document 数据记录行/文档
column field 数据字段/域
index index 索引
table joins 表连接,MongoDB不支持
primary key primary key 主键,MongoDB自动将_id字段设置为主键
  • 数据库

MongoDB的默认数据库为"db",该数据库存储在data目录中

MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

  • 显示所有数据的列表(数据库为空时不显示):

show dbs

  • 连接数据库

mongomongodb://username:password@IP/

  • 显示当前数据库和集合

db

  • 链接或创建数据库

use dbname

  • 删除数据库
use 数据库名
db.dropDatabase()

实例:

> use testdb
switched to db testdb
> db.dropDatabase()
{ "dropped" : "testdb", "ok" : 1 }
>

文档(表、集合)

  • 插入数据db.集合名称.insert()db.集合名称.save()
db.集合名称.insert({"name":"database name"})
  • 删除集合
db.集合名称.drop()
  • 查询数据(pretty() 方法以格式化的方式来显示所有文档。)
db.集合名称.find()
db.集合名称.find().pretty()

操作符

操作 格式 例子
等于 {key : value} db.col.find({"name":"title"}).pretty()
小于 {key:{$lt : value}} db.col.find({"likes":{$lt:50}}).pretty()
小于等于 {key:{$lte : value}} db.col.find({"likes":{$lte:50}}).pretty()
大于 {key:{$gt: value}} db.col.find({"likes":{$gt:50}}).pretty()
大于等于 {key:{$gte: value}} db.col.find({"likes":{$gte:50}}).pretty()
不等于 {key:{$ne: value}} db.col.find({"likes":{$ne:50}}).pretty()

AND 条件

MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,及常规 SQL 的 AND 条件。
语法格式如下:

>db.col.find({key1:value1, key2:value2}).pretty()
> db.col.insert({name:"name", value:"value"})
WriteResult({ "nInserted" : 1 })
> db.col.find({name:"name", value:"value"})
{ "_id" : ObjectId("57b72c84e046f1574e641799"), "name" : "name", "value" : "value" }

OR 条件

使用关键字$or

>db.col.find(
   {
      $or: [
         {key1: value1}, {key2:value2}
      ]
   }
).pretty()
> db.col.find()
{ "_id" : ObjectId("57b725e6e046f1574e641797"), "name" : "update title2" }
{ "_id" : ObjectId("57b72c84e046f1574e641799"), "name" : "name", "value" : "value" }
{ "_id" : ObjectId("57b72ce7e046f1574e64179a"), "name" : "testname", "value" : "test" }
>
> db.col.find({$or:[{name:"name"}, {value:"test"}]})
{ "_id" : ObjectId("57b72c84e046f1574e641799"), "name" : "name", "value" : "value" }
{ "_id" : ObjectId("57b72ce7e046f1574e64179a"), "name" : "testname", "value" : "test" }
>

AND 和 OR 联合使用

> db.col.find()
{ "_id" : ObjectId("57b725e6e046f1574e641797"), "name" : "update title2" }
{ "_id" : ObjectId("57b72c84e046f1574e641799"), "name" : "name", "value" : "value" }
{ "_id" : ObjectId("57b72ce7e046f1574e64179a"), "name" : "testname", "value" : "test" }
{ "_id" : ObjectId("57b72e50e046f1574e64179b"), "name" : "name", "value" : "test", "number" : 100 }
{ "_id" : ObjectId("57b72e6de046f1574e64179c"), "name" : "name", "value" : "test", "number" : 200 }
{ "_id" : ObjectId("57b72e70e046f1574e64179d"), "name" : "name", "value" : "test", "number" : 100 }
>
>
> db.col.find({number: {$eq : 100}, $or : [{name:"name"}, {value:"test"}]})
{ "_id" : ObjectId("57b72e50e046f1574e64179b"), "name" : "name", "value" : "test", "number" : 100 }
{ "_id" : ObjectId("57b72e70e046f1574e64179d"), "name" : "name", "value" : "test", "number" : 100 }
>

$type 操作符

$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。

limit和skip的用法

limit限制返回的条数

skip跳过指定数量的数据

> db.col.find();
{ "_id" : ObjectId("57b725e6e046f1574e641797"), "name" : "update title2" }
{ "_id" : ObjectId("57b72c84e046f1574e641799"), "name" : "name", "value" : "value" }
{ "_id" : ObjectId("57b72ce7e046f1574e64179a"), "name" : "testname", "value" : "test" }
{ "_id" : ObjectId("57b72e50e046f1574e64179b"), "name" : "name", "value" : "test", "number" : 100 }
{ "_id" : ObjectId("57b72e6de046f1574e64179c"), "name" : "name", "value" : "test", "number" : 200 }
{ "_id" : ObjectId("57b72e70e046f1574e64179d"), "name" : "name", "value" : "test", "number" : 100 }
>
> db.col.find().limit(2)
{ "_id" : ObjectId("57b725e6e046f1574e641797"), "name" : "update title2" }
{ "_id" : ObjectId("57b72c84e046f1574e641799"), "name" : "name", "value" : "value" }
>
> db.col.find().limit(2).skip(2)
{ "_id" : ObjectId("57b72ce7e046f1574e64179a"), "name" : "testname", "value" : "test" }
{ "_id" : ObjectId("57b72e50e046f1574e64179b"), "name" : "name", "value" : "test", "number" : 100 }
  • 文档排序

使用sort()方法并通过参数指定排序的字段,并使用 1-1 来指定排序的方式,其中 1升序排列,而-1是用于降序排列。

格式:db.集合名称.find().sort({KEY:1})

> db.col.find()
{ "_id" : ObjectId("57b725e6e046f1574e641797"), "name" : "update title2" }
{ "_id" : ObjectId("57b72c84e046f1574e641799"), "name" : "name", "value" : "value" }
{ "_id" : ObjectId("57b72ce7e046f1574e64179a"), "name" : "testname", "value" : "test" }
{ "_id" : ObjectId("57b72e50e046f1574e64179b"), "name" : "name", "value" : "test", "number" : 100 }
{ "_id" : ObjectId("57b72e6de046f1574e64179c"), "name" : "name", "value" : "test", "number" : 200 }
{ "_id" : ObjectId("57b72e70e046f1574e64179d"), "name" : "name", "value" : "test", "number" : 100 }
>
> db.col.find().sort({name:1})
{ "_id" : ObjectId("57b72c84e046f1574e641799"), "name" : "name", "value" : "value" }
{ "_id" : ObjectId("57b72e50e046f1574e64179b"), "name" : "name", "value" : "test", "number" : 100 }
{ "_id" : ObjectId("57b72e6de046f1574e64179c"), "name" : "name", "value" : "test", "number" : 200 }
{ "_id" : ObjectId("57b72e70e046f1574e64179d"), "name" : "name", "value" : "test", "number" : 100 }
{ "_id" : ObjectId("57b72ce7e046f1574e64179a"), "name" : "testname", "value" : "test" }
{ "_id" : ObjectId("57b725e6e046f1574e641797"), "name" : "update title2" }
>
> db.col.find().sort({name:-1})
{ "_id" : ObjectId("57b725e6e046f1574e641797"), "name" : "update title2" }
{ "_id" : ObjectId("57b72ce7e046f1574e64179a"), "name" : "testname", "value" : "test" }
{ "_id" : ObjectId("57b72c84e046f1574e641799"), "name" : "name", "value" : "value" }
{ "_id" : ObjectId("57b72e50e046f1574e64179b"), "name" : "name", "value" : "test", "number" : 100 }
{ "_id" : ObjectId("57b72e6de046f1574e64179c"), "name" : "name", "value" : "test", "number" : 200 }
{ "_id" : ObjectId("57b72e70e046f1574e64179d"), "name" : "name", "value" : "test", "number" : 100 }
>
  • 更新文档(update或者save来更新文档)

update方式

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)
  • query : update的查询条件,类似sql update查询内where后面的。
  • update : update的对象和一些更新的操作符(如$set,$inc...)等,也可以理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新
  • writeConcern :可选,抛出异常的级别。

例子:

> db.col.find()
>
>
> db.col.insert({"name" : "value"})
WriteResult({ "nInserted" : 1 })
> db.col.insert({"name" : "title"})
WriteResult({ "nInserted" : 1 })
> db.col.find()
{ "_id" : ObjectId("57b725e6e046f1574e641797"), "name" : "value" }
{ "_id" : ObjectId("57b725eee046f1574e641798"), "name" : "title" }
> db.col.update({"name" : "title"}, {$set:{"name" : "update title"}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.col.find()
{ "_id" : ObjectId("57b725e6e046f1574e641797"), "name" : "value" }
{ "_id" : ObjectId("57b725eee046f1574e641798"), "name" : "update title" }
>

save方式

save() 方法
save() 方法通过传入的文档来替换已有文档。语法格式如下:
db.collection.save(
   <document>,
   {
     writeConcern: <document>
   }
)

参数说明:

  • document : 文档数据。
  • writeConcern :可选,抛出异常的级别。
  • 删除文档
db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }
)

参数说明:

  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档。
  • writeConcern :(可选)抛出异常的级别。
> db.col.remove({name:"update title"})
WriteResult({ "nRemoved" : 1 })

如果想清空表(truncate)

db.col.remove({})

索引

使用 ensureIndex() 方法来创建索引

db.集合名称.ensureIndex({KEY:1})

升序:1,降序:-1

参数 参数值类型 描述
background Boolean 建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引,即增加 "background" 可选参数。 "background" 默认值为false。
unique Boolean 建立的索引是否唯一。指定为true创建唯一索引。默认值为false.
name string 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。
dropDups Boolean 在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.
sparse Boolean 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true的话,在索引字段中不会查询出不包含对应字段的文档.。默认值为 false.
expireAfterSeconds integer 指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。
v index version 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本。
weights document 索引权重值,数值在 1 到 99,999 之间,表示该索引相对于其他索引字段的得分权重。
default_language string 对于文本索引,该参数决定了停用词及词干和词器的规则的列表。 默认为英语
language_override string 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为 language.

聚合统计

主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)

  • 语法

db.集合名称.aggregate(AGGREGATE_OPERATION)

表达式 描述 实例
$sum 计算总和。 db.mycol.aggregate([{$group : {_id : "$聚合字段", num_tutorial : {$sum : "$统计字段"}}}])
$avg 计算平均值 db.mycol.aggregate([{$group : {_id : "$聚合字段", num_tutorial : {$avg : "$likes"}}}])
$min 获取集合中所有文档对应值得最小值。 db.mycol.aggregate([{$group : {_id : "$聚合字段", num_tutorial : {$min : "$统计字段"}}}])
$max 获取集合中所有文档对应值得最大值。 db.mycol.aggregate([{$group : {_id : "$聚合字段", num_tutorial : {$max : "$统计字段"}}}])
$push 在结果文档中插入值到一个数组中。 db.mycol.aggregate([{$group : {_id : "$聚合字段", url : {$push: "$统计字段"}}}])
$addToSet 在结果文档中插入值到一个数组中,但不创建副本。 db.mycol.aggregate([{$group : {_id : "$聚合字段", url : {$addToSet : "$统计字段"}}}])
$first 根据资源文档的排序获取第一个文档数据。 db.mycol.aggregate([{$group : {_id : "$聚合字段", first_url : {$first : "$统计字段"}}}])
$last 根据资源文档的排序获取最后一个文档数据 db.mycol.aggregate([{$group : {_id : "$聚合字段", last_url : {$last : "$统计字段"}}}])

聚合过程中常用的几个操作:

  • $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
  • $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
  • $limit:用来限制MongoDB聚合管道返回的文档数。
  • $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
  • $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
  • $group:将集合中的文档分组,可用于统计结果。
  • $sort:将输入文档排序后输出。
  • $geoNear:输出接近某一地理位置的有序文档。

主从配置

1、主服务器启动时指定端口和replSet选项

mongod --port "PORT" --dbpath "YOUR_DB_DATA_PATH" --replSet "REPLICA_SET_INSTANCE_NAME"

如:

mongod --port 27017 --dbpath "/data/db" --replSet rs0

注意:

  • 启动后需要通过rs.initiate()来启动一个新的副本,使设置生效
  • 可以使用rs.conf()查看配置和rs.status()查看状态

2、从服务器配置

>rs.add(HOST_NAME:PORT)

如:

>rs.add(192.168.1.100:27017)

分片

备份与恢复

备份命令:

mongodump -h 服务器地址 -d 数据库名称 -o 备份存放目录

恢复命令:

mongorestore -h 服务器地址 -d 数据库名称 --directoryperdb 备份存放目录

监控

  • 状态检查:mongostat 命令
  • 读取、写入、锁等耗时状况:mongotop 命令

mongodb关系

mongodb中文档与文档之间的关系,可以通过嵌入式关系引用式关系进行表示。

嵌入式关系:

"_id":ObjectId("52ffc33cd85242f436000001"),
"contact": "987654321",
"dob": "01-01-1991",
"name": "Tom Benzamin",
"address": [
   {
      "building": "22 A, Indiana Apt",
      "pincode": 123456,
      "city": "Los Angeles",
      "state": "California"
   },
   {
      "building": "170 A, Acropolis Apt",
      "pincode": 456789,
      "city": "Chicago",
      "state": "Illinois"
   }]
}

引用式关系:

{
   "_id":ObjectId("52ffc33cd85242f436000001"),
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin",
   "address_ids": [
      ObjectId("52ffc4a5d85242602e000000"),
      ObjectId("52ffc4a5d85242602e000001")
   ]
}

MongoDB 数据库引用

手动引用

DBRefs

DBRefs

引用格式:

{ $ref : , $id : , $db :  }
  • $ref:集合名称
  • $id:引用的id
  • $db:数据库名称,可选参数
{
   "_id":ObjectId("53402597d852426020000002"),
   "address": {
   "$ref": "address_home",
   "$id": ObjectId("534009e4d852427820000002"),
   "$db": "w3cschoolcc"},
   "contact": "987654321",
   "dob": "01-01-1991",
   "name": "Tom Benzamin"
}

查询分析

使用 explain()

db.users.ensureIndex({gender:1,user_name:1})
db.users.find({gender:"M"},{user_name:1,_id:0}).explain()
{
   "cursor" : "BtreeCursor gender_1_user_name_1",
   "isMultiKey" : false,
   "n" : 1,
   "nscannedObjects" : 0,
   "nscanned" : 1,
   "nscannedObjectsAllPlans" : 0,
   "nscannedAllPlans" : 1,
   "scanAndOrder" : false,
   "indexOnly" : true,
   "nYields" : 0,
   "nChunkSkips" : 0,
   "millis" : 0,
   "indexBounds" : {
      "gender" : [
         [
            "M",
            "M"
         ]
      ],
      "user_name" : [
         [
            {
               "$minElement" : 1
            },
            {
               "$maxElement" : 1
            }
         ]
      ]
   }
}
  • indexOnly: 字段为 true ,表示我们使用了索引。
  • cursor:因为这个查询使用了索引,MongoDB中索引存储在B树结构中,所以这是也使用了BtreeCursor类型的游标。如果没有使用索引,游标的类型是BasicCursor。这个键还会给出你所使用的索引的名称,你通过这个名称可以查看当前数据库下的system.indexes集合(系统自动创建,由于存储索引信息,这个稍微会提到)来得到索引的详细信息。
  • n:当前查询返回的文档数量。
  • nscanned/nscannedObjects:表明当前这次查询一共扫描了集合中多少个文档,我们的目的是,让这个数值和返回文档的数量越接近越好。
  • millis:当前查询所需时间,毫秒数。
  • indexBounds:当前查询具体使用的索引。

使用 hint()

强制mongodb使用某个索引。

db.users.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1})

mongodb 原子操作

mongodb不支持事务,所以,在你的项目中应用时,要注意这点。无论什么设计,都不要要求mongodb保证数据的完整性。

但是mongodb提供了许多原子操作,比如文档的保存,修改,删除等,都是原子操作。

所谓原子操作就是要么这个文档保存到Mongodb,要么没有保存到Mongodb,不会出现查询到的文档没有保存完整的情况。

原子操作常用命令

  • $set:存在时更新,不存在时新增
{ $set : { field : value } }
  • $unset:删除一个键
{ $unset : { field : 1} }
  • $inc:对数值类型的键进行增加和减少操作
{ $inc : { field : value } }
  • $push:把value追加到field数组里去,如果数组不存在则新增。
{ $push : { field : value } }
  • $pushAll:功能和$push类似;追加多个值到一个数组字段内
{ $pushAll : { field : value_array } }
  • $pull:从数组field内删除一个等于value值的文档。
{ $pull : { field : _value } }
  • $addToSet:增加一个唯一值到数组内,不存在时增加,存在时忽略。
  • $pop:删除数组的第一个或最后一个元素
{ $pop : { field : 1 } }
  • $rename:修改字段名称
{ $rename : { old_field_name : new_field_name } }
  • $bit:位操作,integer类型
{$bit : { field : {and : 5}}}

mongodb 高级索引

  • 索引数组字段

如:

{
   "address": {
      "city": "Los Angeles",
      "state": "California",
      "pincode": "123"
   },
   "tags": [
      "music",
      "cricket",
      "blogs"
   ],
   "name": "Tom Benzamin"
}

建立索引:

db.users.ensureIndex({"tags":1})

使用索引:

db.users.find({tags:"cricket"}).explain()
  • 索引子文档字段
db.users.ensureIndex({"address.city":1,"address.state":1,"address.pincode":1})

记住查询表达式必须遵循指定的索引的顺序。

查询限制

索引不能被以下的查询使用:

  • 正则表达式及非操作符,如 $nin, $not, 等。
  • 算术运算符,如 $mod, 等。
  • $where 子句
  • 索引键限制

从2.6版本开始,如果现有的索引字段的值超过索引键的限制,MongoDB中不会创建索引。

  • 插入文档超过索引键限制

如果文档的索引字段值超过了索引键的限制,MongoDB不会将任何文档转换成索引的集合。与mongorestore和mongoimport工具类似。

  • 最大范围
  • 集合中索引不能超过64个
  • 索引名的长度不能超过125个字符
  • 一个复合索引最多可以有31个字段

MongoDB ObjectId

ObjectId 是一个12字节 BSON 类型数据,有以下格式:

  • 前4个字节表示时间戳
  • 接下来的3个字节是机器标识码
  • 紧接的两个字节由进程id组成(PID)
  • 最后三个字节是随机数。
  • 创建新的ObjectId
ObjectId()
  • 获取创建文档的时间戳
ObjectId("5349b4ddd2781d08c09890f4").getTimestamp()
  • ObjectId 转换为字符串
> ObjectId().str
57bb019f1b9653f34d858a03

MongoDB Map Reduce

MongoDB 正则表达式

时间: 2024-08-01 08:54:05

mongodb 基础知识的相关文章

python操作MongoDB基础知识_python

首先运行easy_install pymongo命令安装pymongo驱动.然后执行操作:创建连接 复制代码 代码如下: In [1]: import pymongoIn [2]: connection = pymongo.Connection('localhost', 27017) 切换到数据库malware 复制代码 代码如下: In [3]: db = connection.malware 获取collection 复制代码 代码如下:  In [4]: collection = db.m

基于C#的MongoDB数据库开发应用(1)--MongoDB数据库的基础知识和使用

在花了不少时间研究学习了MongoDB数据库的相关知识,以及利用C#对MongoDB数据库的封装.测试应用后,决定花一些时间来总结一下最近的研究心得,把这个数据库的应用单独作为一个系列来介绍,希望从各个方面来总结并记录一下这个新型.看似神秘的数据库使用过程.本文是这个系列的开篇,主要介绍一些MongoDB数据库的基础知识.安装过程.基础使用等方面. MongoDB是一款由C++编写的高性能.开源.无模式的常用非关系型数据库产品,是非关系数据库当中功能最丰富.最像关系数据库的数据库.它扩展了关系型

JavaScript中的Promise使用详解_基础知识

许多的语言,为了将异步模式处理得更像平常的顺序,都包含一种有趣的方案库,它们被称之为promises,deferreds,或者futures.JavaScript的promises ,可以促进关注点分离,以代替紧密耦合的接口. 本文讲的是基于Promises/A 标准的JavaScript promises.[http://wiki.commonjs.org/wiki/Promises/A] Promise的用例:     执行规则     多个远程验证     超时处理     远程数据请求

RESTful_基础知识

前言 本篇主要是RESTful的基础知识整理,主要是为了将要开始的Openstack架构主题做知识积累.理解好RESTful的设计思想无论是对学习Openstack架构还是Openstack Dashboard实现都是一件事半功倍的事情. RESTful REST(Representational State Transfer):是一种软件架构的设计风格,而不是一种标准.主要用于C/S架构的软件设计,也能很好的支持B/S架构,为软件设计提供了一组原则和约束条件,但这是原则和约束的条件均不具有标准

Java核心技术 卷Ⅰ 基础知识(原书第10版)

Java核心技术系列 Java核心技术 卷Ⅰ 基础知识 (原书第10版) Core Java Volume I-Fundamentals (10th Edition) [美] 凯S.霍斯特曼(Cay S. Horstmann) 著 周立新 陈 波 叶乃文 邝劲筠 杜永萍 译 图书在版编目(CIP)数据 Java核心技术 卷Ⅰ 基础知识(原书第10版) / (美)凯S. 霍斯特曼(Cay S. Horstmann)著:周立新等译. -北京:机械工业出版社,2016.8 (Java核心技术系列) 书

黑马程序员 一、java 概述与基础知识

获取更多资源关注Java帮帮IT资源分享网 一.黑马程序员-java 概述与基础知识 1.何为编程? 编程就是让计算机为解决某个问题而使用某种程序设计语言编写程序代码,并最终得到结果 的过程. 为了使计算机能够理解人的意图,人类就必须要将需解决的问题的思路.方法.和手段通 过计算机能够理解的形式告诉计算机,使得计算机能够根据人的指令一步一步去工作,完 成某种特定的任务.这种人和计算机之间交流的过程就是编程.   2.Java 语言概述,历史.特点 是 SUN(Stanford Universit

MFC 基础知识:主对话框与子对话框(一)

(仅供使用VS MFC初学者学习,高手莫见笑)在MFC中通常会使用点击一个按钮,弹出一个子对话框的基础知识,这些都是学习MFC的基础知识,也是非常重要的知识,这里我就简单的讲讲这些知识. 一. 设置主对话框 1.文件-新建项目(我设置的过程名为:EditSet)-MFC应用程序-该页面使用"基于对话框"-完成即可.2.在"资源视图"中打开Dialog对话框,删除"TODO:在此处放置对话框控件"和"确定"."退出&q

MFC 基础知识:主对话框与子对话框(二)

(仅供使用VS MFC初学者学习,高手莫见笑)接"MFC 基础知识:主对话框与子对话框(一)"的内容在"MFC 基础知识:主对话框与子对话框(一)"中Edit Control(编辑框)控件中输出内容,主要是想讲讲在创建的子对话框中如何实现一些操作:即添加OnInitDialog初始化函数的操作,这里的操作VS2012与VC++6.0略有些改动. 一. 主对话框编辑框中输出内容 1.找到主对话框XXXDlg.cpp中的OnInitDialog()初始化函数,在函数注释

基础知识__WebService

基础知识__WebService 本文由 Luzhuo 编写,请尊重个人劳动成果,转发请保留该信息. 原文: http://blog.csdn.net/Rozol/article/details/50511873 微博: http://weibo.com/u/2524456400 这是一篇关于WebService的基础知识的整理 介绍 提供一种通过web方式访问的Api. 解决两个系统/应用之间的远程调用.(跨语言,跨平台) 简单应用(原理) New –> java project –> -