国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Mongodb數據生命周期管理的三種方式

IT那活兒 / 588人閱讀
Mongodb數據生命周期管理的三種方式
[
概述
]


在數據庫的日常運維和性能優化中,數據庫表數據的生命周期管理是一個常見且重要的工作場景。在oracle數據庫中,數據生命周期管理包括歷史分區的truncate、壓縮、分區遷移分級存儲管理以及delete等方案。而在mongodb中,沒有表分區的概念,在分片中,要考慮業務均勻分布在所有數據片中,但是由于時間字段單調遞增的特性,所以基本不會考慮將時間字段作為獨立片鍵。同時,Mongodb的WiredTiger存儲引擎默認采用snappy壓縮算法,在我們的生產系統上,壓縮比例大概在3:1,如果采用zlib算法,壓縮比例可達10:1以上(會增大CPU開銷),所以在一般情況下,mongodb的數據生命周期管理也不會使用手動壓縮方式,如果要建設歷史歸檔庫,可考慮使用zlib算法進行壓縮。Mongodb的數據生命周期管理可利用自身的功能特性實現,下面將對幾種數據清理方案進行描述。


[
三種Mongodb數據清理方案
]


一、TTL索引

TTL(timetolive)索引是MongoDB中一種特殊的索引,是一種在除_id外的時間字段上創建的單列索引(復合索引無法擁有TTL屬性)。在創建TTL索引后,后臺線程將根據字段值再指定的秒數后自動刪除數據。如:

db.Record.createIndex({"timestamp":1},{ expireAfterSeconds:2678400 , background:true});

表示根據timestamp字段時間的31天后過期刪除數據。


如果字段值是一個數組,則以數組的最小時間為準。如果要修改TTL索引的數據過期時間,無需重建索引,可通過如下命令修改:

db.runCommand({ collMod: "test", --集合名稱

index:{ name: "lastModifiedDate_1", --索引名稱

expireAfterSeconds:60   --過期時間

}})


注意在復制集架構中,如果集合數據量較大,并且修改減少數據保留時間,命令執行完成后,后臺線程會緩慢刪除數據,此過程中會產生大量的oplog,需關注系統配置的oplogsize,確保有足夠的空間存放Oplog,以便于在存在延遲從節點或者從節點IO性能較差的情況下,不至于出現主節點的oplog被覆蓋丟失從而引起同步異常的情況。并且在大量數據被刪除后,會出現集合碎片,類似oracle的高水位,空間再集合中可重用,但是不會釋放給操作系統,需進行compact操作,此操作可導致庫級鎖,可以在進行主從切換的情況下,滾動在從節點操作。


二、capped集合

capped集合是mongodb中的一種特殊的集合,其大小是固定的,數據寫入是有序的,當存儲的數據超過大小限制時,將采取先入先出的原則,自動清理舊數據。在限制集合大小的同時,capped集合還可以限制文檔數量,當存儲數據未達到文檔數量限制但是達到大小限制,也會自動清理數據。oplog.rs就是一個固定集合。由于capped集合的大小是固定的,數據是有序的,所以其插入和查詢的性能都優于普通集合。


示例:

db.createCollection("log", { capped: true, size: 10737418240 } )  --創建10GB的固定集合

db.createCollection("log",{ capped : true, size : 10737418240, max : 50000000 } ) --創建最大10GB,且不超過5千萬行的固定集合。注意:固定集合無法手工刪除數據,且無法進行分片。


三、通過_id刪除陳舊歷史數據

在一個集合中,若存在時間字段時,可通過時間字段定位并刪除歷史數據,但是如果沒有時間字段,怎么定位歷史數據呢?在mongodb中,每個集合會默認創建一個_id字段,并且該字段上默認創建了主鍵索引,該字段類型為ObjectId。ObjectId是一個12字節的BSON類型字符串。按照字節順序,依次代表:

4字節:UNIX時間戳

3字節:表示運行MongoDB的機器

2字節:表示生成此_id的進程

3字節:由一個隨機數開始的計數器生成的值


通過js代碼將時間值轉換為objectid,按時間范圍清理歷史數據。利用objectid的有序性和唯一索引過濾,快速清理目標數據,避免清理條件字段無索引時產生低效的全表掃描。


詳細方法如下:

1.獲取時間條件時間范圍轉換為objectid

ObjectId(Math.floor((new Date(2019/8/9))/1000).toString(16) + "0000000000000000")

ObjectId("5b6b13800000000000000000")


2.將轉換后的時間與objectid比較,按照objectid刪除

var objIdMin = ObjectId(Math.floor((new Date(2019/8/9))/1000).toString(16) + "0000000000000000")

var objIdMax = ObjectId(Math.floor((new Date(2018/9/11))/1000).toString(16) + "0000000000000000")

db.test.remove({_id:{$gt: objIdMin, $lt: objIdMax}})

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/130178.html

相關文章

  • React創建組件三種方式及其區別

    摘要:是以的形式來創建的組件的,是目前極為推薦的創建有狀態組件的方式,最終會取代形式相對于可以更好實現代碼復用。當然,有三種手動綁定方法可以在構造函數中完成綁定,也可以在調用時使用來完成綁定,還可以使用來綁定。 React推出后,出于不同的原因先后出現三種定義react組件的方式,殊途同歸;具體的三種方式: 函數式定義的無狀態組件 es5原生方式React.createClass定義的組件...

    Towers 評論0 收藏0
  • 關于Vue2一些值得推薦的文章 -- 五、六月份

    摘要:五六月份推薦集合查看最新的請點擊集前端最近很火的框架資源定時更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語。葉上初陽乾宿雨,水面清圓,一一風荷舉。家住吳門,久作長安旅。五月漁郎相憶否。小楫輕舟,夢入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請::點擊::集web前端最近很火的vue2框架資源;定時更新,歡迎 Star 一下。 蘇...

    sutaking 評論0 收藏0
  • 關于Vue2一些值得推薦的文章 -- 五、六月份

    摘要:五六月份推薦集合查看最新的請點擊集前端最近很火的框架資源定時更新,歡迎一下。蘇幕遮燎沈香宋周邦彥燎沈香,消溽暑。鳥雀呼晴,侵曉窺檐語。葉上初陽乾宿雨,水面清圓,一一風荷舉。家住吳門,久作長安旅。五月漁郎相憶否。小楫輕舟,夢入芙蓉浦。 五、六月份推薦集合 查看github最新的Vue weekly;請::點擊::集web前端最近很火的vue2框架資源;定時更新,歡迎 Star 一下。 蘇...

    khs1994 評論0 收藏0
  • Apache 工作三種模式:Prefork、Worker、Event

    摘要:的三種工作模式服務器目前一共有三種穩定的,多進程處理模塊模式。模式下所能同時處理的請求總數是由子進程總數乘以值決定的,應該大于等于。默認最大的子進程總數是,加大時也需要顯式聲明最大值是。 Apache 的三種工作模式(Prefork、Worker、Event) Web服務器Apache目前一共有三種穩定的MPM(Multi-Processing Module,多進程處理模塊)模式。 它...

    learning 評論0 收藏0

發表評論

0條評論

IT那活兒

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<