真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

MongoDB實戰(zhàn)(3)固定集合與GridFS

一、固定集合(Capped Collection)

成都創(chuàng)新互聯(lián)公司是專業(yè)的灤平網(wǎng)站建設公司,灤平接單;提供成都網(wǎng)站制作、成都做網(wǎng)站,網(wǎng)頁設計,網(wǎng)站設計,建網(wǎng)站,PHP網(wǎng)站建設等專業(yè)做網(wǎng)站服務;采用PHP框架,可快速的進行灤平網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團隊,希望更多企業(yè)前來合作!

capped collections 是性能出色的有著固定大小的集合,以 LRU(Least Recently Used 最近最少使用)規(guī)則和插入順序進行 age-out(老化移出)處理,自動維護集合中對象的插入順序,在創(chuàng)建時要預先指定大小。如果空間用完,新添加的對象將會取代集合中最舊的對象。
可以插入及更新,但更新不能超出 collection 的大小,否則更新失敗。不允許刪除,但是可以調(diào)用 drop() 刪除集合中的所有行,但是 drop 后需要顯式地重建集合。

常見用處:

1、 logging
MongoDB 中日志機制的首選,MongoDB 沒有使用日志文件,而是把日志事件存儲在數(shù)
據(jù)庫中。在一個沒有索引的 capped collection 中插入對象的速度與在文件系統(tǒng)中記錄日
志的速度相當。
2、 cache
緩存一些對象在數(shù)據(jù)庫中,比如計算出來的統(tǒng)計信息。這樣的需要在 collection 上建立
一個索引,因為使用緩存往往是讀比寫多。
3、 auto archiving
可以利用 capped collection 的 age-out 特性,省去了寫 cron 腳本進行人工歸檔的工作。

推薦用法:

1、 為了發(fā)揮 capped collection 的最大性能,如果寫比讀多,最好不要在上面建索引,否則
插入速度從"log speed"降為"database speed"。
2、使用"nature ordering"可以有效地檢索最近插入的元素,因為 capped collection 能夠保證
自然排序就是插入時的順序,類似于 log 文件上的 tail 操作。

實際案例:

可以在創(chuàng)建 capped collection 時指定 collection 中能夠存放的最大文檔數(shù)。但這時也要指
定 size,因為總是先檢查 size 后檢查 maxRowNumber。
可以使用 validate()查看一個 collection已經(jīng)使用了多少空間,從而決定 size 設為多大。

下面我們創(chuàng)建一個集合:

db.createCollection('mycappc1',{capped:true,size:100000,max:10})

這是一個最多10行記錄的固定集合。

MongoDB實戰(zhàn)(3)固定集合與GridFS

當我們插入10條記錄后,再有新的插入時,最老的一條將會被剔除,看看如下效果:

MongoDB實戰(zhàn)(3)固定集合與GridFS

查看以使用多少空間:

MongoDB實戰(zhàn)(3)固定集合與GridFS

上 述 的 createCollection 函 數(shù) 也 可 以 用 來 創(chuàng) 建 一 般 的 collection , 還 有 一 個 參 數(shù)
"autoIndexID",值可以為"true"和"false"來決定是否需要在"_id"字段上自動創(chuàng)建索引。

如下:

db.createCollection('mycappc2',{capped:true,size:100000,max:10,autoIndexId:false})

則表沒有索引,對于寫多讀少的表非常合適

MongoDB實戰(zhàn)(3)固定集合與GridFS

二、GridFS

GridFS 是一種將大型文件存儲在 MongoDB 數(shù)據(jù)庫中的文件規(guī)范。
由于 MongoDB 中 BSON 對象大小是有限制的,所以 GridFS 規(guī)范提供了一種透明的機制,可
以將一個大文件分割成為多個較小的文檔,這樣的機制允許我們有效的保存大文件對象,
特別對于那些巨大的文件,比如視頻、高清圖片等。

GridFS 使用兩個表來存儲數(shù)據(jù):
files 包含元數(shù)據(jù)對象
chunks 包含其他一些相關信息的二進制塊
為了使多個 GridFS 命名為一個單一的數(shù)據(jù)庫,文件和塊都有一個前綴,默認情況下,前綴
是 fs,所以任何默認的 GridFS 存儲將包括命名空間 fs.files 和 fs.chunks。各種第三方語言的
驅(qū)動有權限改變這個前綴,所以你可以嘗試設置另一個 GridFS 命名空間用于存儲照片,它
的具體位置為:photos.files 和 photos.chunks。下面我們看一下實際的例子吧。
這里使用命令行工具

/usr/bin/mongofiles put /tmp/testfile
#結(jié)果如下
connected to: 127.0.0.1
added file: { _id: ObjectId('5280bfc58bf9a82c5ba2abc4'), filename: "/tmp/testfile", chunkSize: 262144, uploadDate: new Date(1384169413607), md5: "21395b76d80f48cc069fa90d0c639513", length: 29 }
done!
#查看
/usr/bin/mongofiles list
connected to: 127.0.0.1
/tmp/testfile   29

接下來我們進庫里看一下是否有新的東西
MongoDB實戰(zhàn)(3)固定集合與GridFS

字段說明:
Filename: 存儲的文件名
chunkSize: chunks 分塊的大小
uploadDate: 入庫時間
md5: 此文件的 md5 碼
length: 文件大小, 單位”字節(jié)”
看來 fs.files 中存儲的是一些基礎的元數(shù)據(jù)信息

MongoDB實戰(zhàn)(3)固定集合與GridFS

其中比較重要的字段是”n”,它代表的是 chunks 的序號,此序號從 0 開始,看來 fs.chunks
中存儲的是一些實際的內(nèi)容數(shù)據(jù)信息。

我們即然能將此文件存進去,我們就應該有辦法將其取出來,下面看一下實例:
MongoDB實戰(zhàn)(3)固定集合與GridFS

-校驗 md5,結(jié)果跟庫里相同
db.fs.chunks.ensureIndex({files_id:1, n:1}, {unique: true});
這樣,一個塊就可以利用它的 files_id 和 n 的值進行檢索。注意,GridFS 仍然可以用 findOne
得到第一個塊,如下:
db.fs.chunks.findOne({files_id: myFileID, n: 0});
MongoDB實戰(zhàn)(3)固定集合與GridFS


文章標題:MongoDB實戰(zhàn)(3)固定集合與GridFS
文章轉(zhuǎn)載:http://weahome.cn/article/jgjpip.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部