【翻譯】MongoDB指南/引言

来源:http://www.cnblogs.com/hdwgxz/archive/2016/10/08/5879317.html
-Advertisement-
Play Games

【原文地址】https://docs.mongodb.com/manual/ 引言 MongoDB是一種開源文檔型資料庫,它具有高性能,高可用性,自動擴展性 1.文檔資料庫 MongoDB用一個文檔來表示一條記錄,文檔的數據結構由鍵值對組成。MongoDB文檔類似於JSON對象,欄位值可能是文檔,數 ...


【原文地址】https://docs.mongodb.com/manual/

引言

MongoDB是一種開源文檔型資料庫,它具有高性能,高可用性,自動擴展性

1.文檔資料庫

MongoDB用一個文檔來表示一條記錄,文檔的數據結構由鍵值對組成。MongoDB文檔類似於JSON對象,欄位值可能是文檔,數組,或文檔數組。

 

使用文檔的優點:

  • 文檔中欄位值的數據類型同大多數編程語言中的原生數據類型一致
  • 嵌入式文檔和數組減少了連接查詢的需求
  • 動態的文檔結構支持多態性

2.主要特性

高性能

MongoDB支持高性能數據存儲。特別地:

  • 支持嵌入式數據模型以減少對資料庫系統的I/O
  • 利用索引實現快速查詢,並且嵌入式文檔和集合也支持索引

豐富的查詢語言

MongoDB提供了豐富的查詢語言以支持讀寫操作和聚集操作、文本檢索、地理信息查詢

高可用性

MongoDB的複製能力被稱作複製集(replica set),它提供了自動的故障遷移和數據冗餘。一個複製集是一組包含了相同數據的多台MongoDB伺服器,它提供了冗餘性和加強了數據的可用性。

橫向擴展

MongoDB的橫向擴展能力是其核心功能的一部分:

  • 分片的數據分佈在伺服器集群上
  • 帶標簽的分片能夠引導數據到指定的分片上

支持多存儲引擎

包括:WiredTiger Storage EngineMMAPv1 Storage Engine。此外,MongoDB 提供可插拔存儲引擎API允許第三方開發者為MongoDB開發存儲引擎。

 

3.資料庫和集合

MongoDB 存儲BSON文檔,例如數據記錄在集中,集在資料庫中。

 

3.1資料庫

MongoDB 中資料庫持有集

Mongo shell中,選一個資料庫使用如下命令:use <db> ,例如:

use myDB

創建資料庫

如果待操作的資料庫不存在,那麼在第一次MongoDB 存儲數據時,MongoDB會創建這個資料庫。例如,使用如下命令操作一個不存在的資料庫。

use myNewDB

db.myNewCollection1.insert( { x: 1 } )

insert()操作創建了資料庫myNewDB,若集合myNewCollection1也不存在,同樣地集合myNewCollection1也被創建。

3.2

MongoDB 在集中存儲文檔,集類似於關係資料庫中的表。

創建一個集

如果一個集不存在,使用下麵命令時集合會被創建:

db.myNewCollection2.insert( { x: 1 } )

db.myNewCollection3.createIndex( { y: 1 } )

insert()  createIndex()在集不存在的情況下會創建集

顯式創建集合

MongoDB 提供了db.createCollection()方法來顯示地創建一個集。可以為創建的集合指定參數,例如設置集合的大小或者文檔的驗證規則,如果不需要指定這些參數,那麼沒必要顯示地創建一個集

文檔驗證3.2版新特性)

預設情況下,一個集中的文檔不必具有相同的結構 

一個集中的文檔不需要具有一系列相同的欄位,並且不同文檔中欄位的數據類型可以不同。

修改文檔結構

可以更改集中的文檔結構,如添加新欄位,刪除現有欄位,或將欄位值更改為一種新的類型,更新文檔結構

3.3固定集

3.3.1概述

固定集,即具有固定大小的集,它支持基於插入順序的插入和查詢這兩種高通量操作。固定大小的集的工作方式類似於迴圈緩存:一旦一個集被填滿,待插入的文檔會覆蓋掉最先插入的文檔。

3.3.2行為

插入順序

固定集保證了插入順序,因此對於查詢操作而言,不需要索引的支持就可以返回多個按順序排列的文檔。沒有索引的開銷,固定集支持更高的插入吞吐量。

自動刪除最先插入的文檔

為了給新文檔讓出存儲空間,固定集自動刪除最先插入的文檔而不需要顯示的刪除操作。

例如,集合oplog.rs中存儲了副本集操作日誌,這裡副本集使用了固定集。考慮下麵對固定集可能的操作:

  • 存儲由大容量系統生成的日誌信息。在索引的情況下,文檔插入固定集合的速度與將日誌信息寫入文件系統的速度相似。此外,先進先出的特性保證了事件的順序,同時管理了存儲的使用。
  • 在固定集合中緩存少量數據。由於緩存重讀而非寫,你應確保這個集合總在工作集中(例如,記憶體中)或接受一點點寫操作,因為索引需要寫操作。

_id 欄位索引

固定集含有_id欄位,此欄位索引是預設的。

3.3.3限制和建議

更新

如果你要更新固定集合中的文檔,創建索引以防止全表掃描。

文檔大小3.2版本變更)

如果更新或替換操作改變了文檔大小,則操作失敗

刪除文檔

不能刪除固定集合中的文檔,可使用drop() 命令刪除整個固定集並新建之。

分片

固定集合不允許分片

查詢效率

使用自然排序可高效地檢索最新插入的元素。這是(有點)像追蹤一個日誌文件。

聚集操作符$out

不能使用聚集管道操作符$out將結果寫入固定集合

3.3.4過程

創建固定集合

mongo shel中,使用db.createCollection()方法創建固定集,創建固定集的時候要指定集的位元組大小,MongoDB將會提前為所創建的固定集合分配存儲空間。固定集合的位元組大小包含了內部使用的空間大小。

db.createCollection( "log", { capped: true, size: 100000 } )

如果欄位的位元組大小小於等於4096位元組,那麼固定集位元組大小為4096位元組。否則MongoDB 會將給定值提升為256位元組的整數倍。

另外,你可以使用max 欄位設置集合中文檔的最大數量:

db.createCollection("log", { capped : true, size : 5242880, max : 5000 } )

註意:對size的設置是必須的。在集合中的文檔數量還未達到最大值而集合的位元組大小已經達到最大時, MongoDB 同樣會移除最先插入的文檔。

查詢固定集合

如果使用 find()方法查詢固定集合而沒有指定排序規則,查詢返回結果的排序和文檔插入時的排序是一樣的。

為了使查詢結果的排序與插入時相反,可以使用sort() 方法並將$natural參數設置為-1:

db.cappedCollection.find().sort( { $natural: -1 } )

檢查集合是否為固定集合

使用isCapped()方法檢查集合是否為固定集合:

db.collection.isCapped()

將集合轉換為固定集合

使用convertToCapped 命令將一個非固定集合轉換為固定集合:

db.runCommand({"convertToCapped": "mycoll", size: 100000});

size 參數設定了固定集合的位元組大小

警告:這個命令將會獲得全局寫入鎖,它會阻塞其他操作直到此操作完成為止。

在指定的一段時間後自動移除數據

對於數據過期的情形,為支持額外的靈活性,可使用MongoDBTTL索引。這些索引允許你利用一種特殊的類型使數據過期並從普通集合中移除,這種特殊的類型是基於時間欄位值和TTL值的。

TTL集合與固定集合不相容。

Tailable游標

對於固定集合,可以使用Tailable游標。Tailable游標類似於Unix tail -f命令,Tailable游標蹤固定集合的末端。新文檔插入固定集合的同時,可以使用Tailable游標檢索文檔。

 

4.文檔

MongoDB將數據存儲為BSON 文檔,BSON是一個JSON文檔的二進位表示形式,但它所包含的數據類型比JSON多。

 

4.1 文檔結構

MongoDB文檔是由鍵值對構成的,形式如下:

{

   field1: value1,

   field2: value2,

   field3: value3,

   ...

   fieldN: valueN

}

欄位值的類型可以是任何BSON類型,包括:文檔,數組,文檔數組,例如:

var mydoc = {

               _id: ObjectId("5099803df3f4948bd2f98391"),

               name: { first: "Alan", last: "Turing" },

               birth: new Date('Jun 23, 1912'),

               death: new Date('Jun 07, 1954'),

               contribs: [ "Turing machine", "Turing test", "Turingery" ],

               views : NumberLong(1250000)

            }

上面的例子包括以下類型:

  • _id為ObjectId類型
  • name為嵌入式文檔類型embedded document,包括first和last欄位
  • birth和death為日期類型Date
  • contribs為字元數組類型array of strings
  • views為長整型NumberLong 

欄位名稱

欄位的名稱是字元串。

對於欄位的命名有下麵的約束:

  • _id為保留欄位,用做主鍵,_id的值與其所在的集合中必須唯一,不可更改,可以是除數組以外的任何類型。
  • 欄位名稱不能以“$”符開始。
  • 欄位名稱不能包含“.”。
  • 欄位名稱不能包含空字元。

BSON 文檔允許有相同的欄位名稱。大多數的MongoDB介面不支持欄位名稱重覆。如果需要重覆的欄位名稱,請查看你所使用的驅動文檔。

MongoDB內部處理程式創建的文檔可能會有重名的欄位,但不會向用戶文檔中添加重名欄位。

欄位值約束

對於已經索引的集合來說,索引欄位值有最大索引鍵值長度(Maximum Index Key Length)限制。

4.2 圓點記法

MongoDB使用圓點符號來訪問數組中的元素和嵌入式文檔欄位。

數組

MongoDB中數組是基於0索引的。使用圓點連接集合名稱和索引位置:

"<array>.<index>"

例如,給定下麵的文檔

{

   ...

   contribs: [ "Turing machine", "Turing test", "Turingery" ],

   ...

}

為了訪問第三個元素,可以這樣:contribs.2

嵌入式文檔

使用圓點連接嵌入式文檔名稱和文檔欄位名稱:

"<embedded document>.<field>"

例如,給定下麵的文檔

{

   ...

   name: { first: "Alan", last: "Turing" },

   contact: { phone: { type: "cell", number: "111-222-3333" } },

   ...

}

  • 為了指定last欄位,使用"name.last"
  • 為了指定number欄位,使用"contact.phone.number"

4.3 文檔約束

文檔大小約束

BSON 文檔最大為16MB。設置單個文檔大小的最大值有助於確保單個文檔不會耗盡系統記憶體,或者在傳輸的過程中不會占用太多的帶寬。為了能夠存儲超過最大值的文檔,MongoDB提供了GridFS API

文檔欄位順序

除以下情況外,MongoDB保持寫入時的欄位順序:

  • _id欄位總是位於文檔的首位
  • 重命名欄位可能會引起欄位重新排序

2.6版本開始MongoDB保持寫入時的欄位順序,但之前的版本並非如此。

_id欄位

MongoDB中,文檔需要_id欄位作為主鍵,如果插入文檔時沒有指定_id欄位,MongoDB會使用ObjectIds 作為預設的_id的預設值。例如,向集合中插入一個不包含位於文檔開始處的_id欄位的文檔,MongoDB會將_id添加進來並且其類型為ObjectIds 

另外,如果Mongod接收一個插入的不包含_id欄位的文檔,Mongod將會添加一個ObjectIds 類型的欄位。

_id欄位有下列行為和約束:

  • 預設地,在創建集合的同時,MongoDB _id欄位創建唯一索引。
  • _id欄位總是文檔中的第一個欄位,如果插入文檔的_id欄位不是第一個欄位,那麼MongoDB會將其移動到首位。
  • _id欄位可以是除數組以外的任何BSON 類型。

警告:為了保證複製功能,不要在_id欄位存儲BSON 正則表達式類型。

下麵是關於_id欄位值的常見選項

  • 使用ObjectIds 類型。
  • 儘可能使用自然唯一字元,這樣可以節省存儲空間和避免額外的索引。
  • 生成自增長數值
  • 在你的應用程式中使用UUID。為了在集合和_id索引中更有效地存儲UUID,將UUID存儲為BSON BinData類型。如果滿足下麵的條件,索引鍵會更有效被存儲。

    binary subtype 值取值範圍為0-7  128-135

    位元組數組的長度是:0,1,2,3,4,5,6,7,8,10,12,14,16,20,24或32.

  • 使用你正在用的MongoDB驅動生成UUID。註意你所用的驅動對於UUID的序列化與反序列化與其他驅動可能不相容。

4.4 文檔結構其他用途

除了定義數據記錄,MongoDB使用文檔結構貫穿始終,包括但不限於:查詢過濾器,更新規範文檔,索引規範文檔。

查詢過濾器文檔

查詢過濾器文檔指定了檢索,更新,刪除文檔的條件。

可以使用<field>:<value>表達式來指定相等條件和查詢運算符表達式。

{

  <field1>: <value1>,

  <field2>: { <operator>: <value> },

  ...

}

更新規範文檔

db.collection.update()方法執行期間,更新規範文檔使用更新運算符指明待修改欄位。

{

  <operator1>: { <field1>: <value1>, ... },

  <operator2>: { <field2>: <value2>, ... },

  ...

}

索引規範文檔

索引規範文檔定義了要索引的欄位和索引類型。

{ <field1>: <type1>, <field2>: <type2>, ...  }

 

5. BSON類型

BSON是一種用來存儲文檔和MongoDB執行遠程調用的二進位序列化格式。BSON規範位於bsonspec.org。

BSON支持以下數據類型,每種數據類型都有一個相應的數字和字元串別名,可以使用別名和$type操作符基於類型匹配模式檢索文檔。

Type

Number

Alias

Notes

Double

1

“double”

 

String

2

“string”

 

Object

3

“object”

 

Array

4

“array”

 

Binary data

5

“binData”

 

Undefined

6

“undefined”

Deprecated.

ObjectId

7

“objectId”

 

Boolean

8

“bool”

 

Date

9

“date”

 

Null

10

“null”

 

Regular Expression

11

“regex”

 

DBPointer

12

“dbPointer”

 

JavaScript

13

“javascript”

 

Symbol

14

“symbol”

 

JavaScript (with scope)

15

“javascriptWithScope”

 

32-bit integer

16

“int”

 

Timestamp

17

“timestamp”

 

64-bit integer

18

“long”

 

Min key

-1

“minKey”

 

Max key

127

“maxKey”

 

5.1 比較/排序順序

當比較不同BSON類型的值時,MongoDB使用下麵的比較順序,從最低到最高:

1.MinKey (內部類型)

2.Null

3.Numbers (ints, longs, doubles)

4.Symbol, String

5.Object

6.Array

7.BinData

8.ObjectId

9.Boolean

10.Date

11.Timestamp

12.Regular Expression

13.MaxKey (內部類型)

對於比較而言,MongoDB將一些類型看作是等價的。例如,數值類型在比較之前執行轉換。

3.0.0版本的變化:DateTimestamp 之前之前的版本,Date和Timestamp 排序相同

對於比較而言,MongoDB將不存在的欄位看作空BSON 對象,例如,對{ } 和{ a: null }在排序中被看作是等價的。

對於數組而言,小於比較或者升序排序比較的是數組中最小的元素,大於比較或者降序排序比較的是數組中最大的元素。例如,比較一個只有一個元素的數組類型欄位(例如 [ 1 ]))和非數組欄位(例如2),比較的是1和2。

空數組(例如[])的比較被看作是小於空(null)或被看作丟失的欄位。

對於BinData 類型,按下麵順序排序:

1.首先,按數據的長度或大小排序

2.然後BSON一個位元組子類型排序

3.最後一個字一個位元組地比較

下麵的章節針對特定的BSON類型描述了特別的註意事項:

5.2 ObjectId

ObjectId占據存儲空間小、唯一、可被快速生成和索引。ObjectId類型值為12位元組,前四個位元組是一個時間戳,表示其被創建的時間:

  • 前四個位元組表示從UNIX新紀元來的秒數
  • 接下來的三個位元組表示機器編號
  • 接下來的兩個位元組表示進程ID
  • 最後三個位元組表示以隨機數開始的計數

MongoDB中,集合中的文檔需要一個作為主鍵的唯一_id欄位,如果沒有指定_id欄位,MongoDB預設將ObjectId類型值作為_id欄位值。例如,待插入文檔不包含頂級_id欄位,MongoDB驅動就會添加一個ObjectId類型的_id欄位

另外,如果mongod接收的待插入文檔不包含_id欄位,mongod將會添加一個ObjectId類型_id欄位。

MongoDB 客戶端應該添加一個值為ObjectId的_id欄位,使用值為ObjectId的_id欄位有如下好處:

  • mongo shell中,你可以使用ObjectId.getTimestamp() 方法獲得ObjectId創建的時間
  • 給值為ObjectId的_id欄位排序大體等價於按時間排序

重要的:

在一秒之內,ObjectId值的順序與生成時間之間的關係並不是嚴格的。如果單系統中,多個系統或多個進程或多個線程在一秒內產生了多個ObjectId值,這些值並不會嚴格地按照插入順序展示。多客戶端之間的時鐘偏移也會導致不嚴格排序,即使這些值由客戶端驅動程式生成。

5.3 String

BSON String類型是UTF-8編碼的。一般來說,每種語言對應的驅動程式在執行序列化和序列化BSON時將語言自身的string類型轉換為UTF-8編碼,這使得BSON string可以接受大多數國際字元。另外,使用$regex 查詢支持UTF-8編碼的正則表達式字元。

5.4 Timestamp

BSON 中有一個特殊的時間戳類型MongoDB內部使用,並且不能和Date 配合使用。時間戳類型是64位的值:

  • 第一個32位是time_t的值(從UNIX新紀元來的秒數)
  • 第二個32位是給定時間里一些操作的遞增序號

在一個mongod實例中,時間戳的值是唯一的。

在複製功能中,oplog有一個ts欄位,欄位值使用DSON時間戳,它反映了操作時間。

註:

BSON時間戳類型Timestape)是供MongoDB內部使用的。大多數情況下,開應用程式時使用Date類型。

如果你插入文檔頂級欄位是一個空值的時間戳類型Timestape)MongoDB 伺服器將會用當前的時間戳Timestape)替換它。例如執行下麵的操作:

var a = new Timestamp();

db.test.insert( { ts: a } );

然後,使用db.test.find()方法查詢,返回結果為:

{ "_id" : ObjectId("542c2b97bac0595474108b48"), "ts" : Timestamp(1412180887, 1) }

如果ts是嵌入式文檔的一個欄位,伺服器會保持其為空值。

2.6版本中的變化:以前當插入文檔時,伺服器僅僅會替換頭兩個空值時間戳類型Timestape)欄位,包括_id欄位。現在伺服器會替換任何的頂級欄位。

5.5 Date

BSON 日期類型是64位整型,表示從UNIX新紀元(Jan 1, 1970)來的毫秒數。這一結果表示了可表達的約2億9000萬年範圍內的過去和未來。

官方的BSON規範指出DSON日期類型是通用協調時間(UTC datetime)。

BSON日期類型是有符號的,負值表示1970年之前的日期。

例如:

mongo shell中,使用new Date()構建日期:var mydate1 = new Date()

mongo shell中,使用ISODate()構建日期:var mydate2 = ISODate()

返回時間值的字元串:mydate1.toString()

返回日期中的月份,日期是基於0索引的,所以一月就是:mydate1.getMonth()

 

6.MongoDB對JSON的擴展

JSON所表示的類型僅是BSON數據類型的子集。為了表示類型信息,MongoDB對JSON做如下擴展:

  • strict模式。BSON類型的strict模式形式符合JSON RFC任何的JSON分析器都能夠分析這些鍵值對形式的strict模式形式。然而,僅MongoDB內部的JSON分析器識別轉化為這種格式的信息。
  • mongo Shell模式。MongoDB內部的JSON分析器和mongo shell都能解析這種模式。

這種形式被用於各種數據類型,這些類型依賴於JSON被解析的上下文環境。

6.1 解析器和支持的格式

strict模式輸入

以下能夠解析strict模式形式,識別類型信息。

其他的JSON解析器,包括mongo shell db.eval()能夠解析鍵值對形式的strict模式表示,但是不能夠識別類型信息。

mongo Shell 模式輸入

以下能夠解析mongo Shell模式表達,識別類型信息。

strict模式輸出

mongoexport REST and HTTP InterfacesStrict模式輸出數據。

mongo Shell 模式輸出

bsondumpmongo Shell 模式輸出數據。

6.2 BSON數據類型和相關的描述

下麵展示了strict模式和mongo Shell模式的一些BSON數據類型及相關描述。

Binary

Strict Mode

 

mongo Shell Mode

{ "$binary": "<bindata>", "$type": "<t>" }

 

BinData ( <t>, <bindata> )

  • <bindata>base64編碼形式的二進位字元串
  • <t> 表示一個位元組指明數據類型。在strict模式中它是十六進位字元串,在mongo Shell模式中它是整數。

Date

Strict Mode

 

mongo Shell Mode

{ "$date": "<date>" }

 

new Date ( <date> )

strict模式中,<date>ISO-8601數據格式的強制性時區欄位,它的模板為:YYYY-MM-DDTHH:mm:ss.mmm<+/-Offset>

當前的MongoDB JSON解析器不支持載入Unix新紀元之前的ISO-8601 字元串日期。當格式化系統的time_t 類型的紀元之前和之後的時間時,採用下麵的格式:{ "$date" : { "$numberLong" : "<dateAsMilliseconds>" } }

Shell 模式中,<date>是一個64位元組有符號整數JSON形式,這個整數表示形式協調世界時間(UTC)的毫秒數。

Timestamp

Strict Mode

 

mongo Shell Mode

{ "$timestamp": { "t": <t>, "i": <i> } }

 

Timestamp( <t>, <i> )

  • <t> 32位無符號整型UTC毫秒形式的JSON表達
  • <i>為自增的32無符號整型

Regular Expression正則表達式)

Strict Mode

 

mongo Shell Mode

{ "$regex": "<sRegex>", "$options": "<sOptions>" }

 

/<jRegex>/<jOptions>

  • <sRegex> 是由有效的JSON字元構成的字元串
  • <jRegex> 是由有效的JSON字元和轉義雙引號字元構成的字元串,但可能不包含轉義的正斜杠(/),
  • <sOptions> 是一個包含以字母表示的正則表達式選項的字元串
  • <jOptions>是一個僅可能包含‘g’, ‘i’, ‘m’ ‘s’ 的字元串,因為JavaScript和Mongo shell表示支持有限的選擇範圍,當轉化成這種表示時,不合格選項將被丟棄。

OID

Strict Mode

 

mongo Shell Mode

{ "$oid": "<id>" }

 

ObjectId( "<id>" )

<id>一個24字元的十六進位字元串

DB Reference

Strict Mode

 

mongo Shell Mode

{ "$ref": "<name>", "$id": "<id>" }

 

DBRef("<name>", "<id>")

  • <name> 是由有效的JSON字元構成的字元串
  • <id>是任何有效的JSON擴展類型

Undefined Type

Strict Mode

 

mongo Shell Mode

{ "$undefined": true }

 

undefined

表示為JavaScript/BSON中未定義類型。

查詢文檔時不能使用未定義類型。將下麵的文檔插入people 集合:

db.people.insert( { name : "Sally", age : undefined } )

下麵的查詢返回一個錯誤:

db.people.find( { age : undefined } )

db.people.find( { age : { $gte : undefined } } )

然而,可使用$type查詢未定義類型:

db.people.find( { age : { $type : 6 } } )

這個查詢返回所有age 欄位為未定義類型的文檔。

MinKey

Strict Mode

 

mongo Shell Mode

{ "$minKey": 1 }

 

MinKey

Minkey BSON數據類型的排序低於所有其他類型。

MaxKey

Strict Mode

 

mongo Shell Mode

{ "$maxKey": 1 }

 

MaxKey

MaxKey BSON數據類型的排序高於所有其他類型。

NumberLong2.6版本新增

Strict Mode

 

mongo Shell Mode

{ "$numberLong": "<number>" }

 

NumberLong( "<number>" )

NumberLong 64位有符號整數,必須使用引號否則它將會被理解為浮點型,這會導致精度丟失。

例如,插入9223372036854775807卻沒有將其用引號括起來:

db.json.insert( { longQuoted : NumberLong("9223372036854775807") } )

db.json.insert( { longUnQuoted : NumberLong(9223372036854775807) } )

當查詢文檔時,longUnquoted 的值改變了,而longQuoted 的值沒變。

執行db.json.find()返回結果為:

{ "_id" : ObjectId("54ee1f2d33335326d70987df"), "longQuoted" : NumberLong("9223372036854775807") }

{ "_id" : ObjectId("54ee1f7433335326d70987e0"), "longUnquoted" : NumberLong("-9223372036854775808") }

-----------------------------------------------------------------------------------------

轉載與引用請註明出處。

時間倉促,水平有限,如有不當之處,歡迎指正。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、一對一關係: 一、一對一關係: 定義:有兩個表,在第一個表中的某一行只與第二個表中的一行相關,同時第二個表中的某一行,也只與第一個表中的一行相關,我們稱這兩個表為一對一關係。 例如: 第一張表: ID 姓名 國籍 貢獻 1001 王大錘 中國 萬萬沒想到 1002 吉澤明步 日本 動作藝術片 1 ...
  • SQL 基礎知識梳理(三) - 聚合和排序 【博主】反骨仔 【原文】http://www.cnblogs.com/liqingwen/p/5926689.html 序 這是《SQL 基礎知識梳理(二) - 查詢基礎》的下篇。 目錄 對錶進行聚合查詢 對錶進行分組 為聚合結果指定條件 對查詢結果進行排 ...
  • 網上說使用localhost即可,確實沒錯,但是有的仍舊會報出無法找到錯誤,我在無法通過的時候又重新安裝了SQLServer,這次選中全部預設安裝,之前使用的是選擇安裝,然後發現多了幾個配置,其中有一項是建立實例,然後我再次選預設,安裝完成後,再啟動SQLServer2012,伺服器名稱中輸入loc ...
  • 回到目錄 對於StackExchange.Redis這個驅動來說,之前的版本在使用Proxy為Twemproxy代理時,它是不支持Password屬性的,即不支持原始的Auth指令,而我也修改過源代碼,為CommandMap添加了Auth但最後測試的結果還是失敗了,就在10月1過完後的第一天,我升級 ...
  • SQL語句中count(1)count(*)count(欄位)用法的區別 在SQL語句中count函數是最常用的函數之一,count函數是用來統計表中記錄數的一個函數, 一. count(1)和count(*)的區別 1. count(1)和count(*)的作用: 都是檢索表中所有記錄行的數目,不 ...
  • 表簇索引(cluster index) 對於表簇索引而言,必須使用表簇。 由於簇索引與索引表簇關聯緊密,無法單獨拿出來總結,因此一併進行總結。 1.1 表簇的定義 表簇是一組通過相同公共列(簇鍵),構成的表的集合。 如上圖,右側獨立的兩張表,employees員工表與departments部門表,通 ...
  • 在ORACLE資料庫中有物理讀(Physical Reads)、邏輯讀(Logical Reads)、一致性讀(Consistant Get)、當前模式讀(DB Block Gets)等諸多概念,如果不理解或混淆這些概念的話,對你深入理解一些知識無疑是一個障礙,但是這些概念確實挺讓讓人犯暈的。下麵我... ...
  • JDBC part1 JDBC概述 jdbc是一種用於執行SQL語句的Java API,通過這套API可以訪問各種關係資料庫,例如;Oracle,MySql,SQLServer等. JDBC驅動程式是各個資料庫廠家根據JDBC的W3C規範製作的JDBC實現類. oracle 驅動地址:F:\Orac ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...