中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MongoDB 表結構分析工具介紹 -- Variety

發布時間:2020-07-28 18:24:46 來源:網絡 閱讀:2700 作者:shanker 欄目:MongoDB數據庫

今天給大家介紹一款分析MongoDB數據庫表結構的軟件 -- Varity.對于MongoDB這種Schema Free的數據庫來說,用軟件自帶的查詢collection中存儲的數據情況很難一眼就看出具體的數據結構,Tomá Dvoák 作者寫了一個Variety.js的腳本就很容易理解沒個collection中的數據結構。作者將工具托管在github上,并且歡迎任何人來提供建議或者添加功能。以下Variety的特點翻譯自作者的博客:


collection信息輸出格式是ASCII的。

  • 可以很清晰看到每個key使用的是什么類型的數據格式

  • 可以看到沒個key在這個collection的使用率是多少

  • 可以限制documents的查詢數量

  • 可以限制查詢documents的深度

  • 可以只分析documents的子集

  • 可以對查詢結果排序

  • 可以保存查詢結果

  • 可以以JSON格式輸出

  • 工具簡介易用,沒用任何其他庫依賴

Variety的下載地址 https://github.com/variety/variety。


使用方法:


mongo DATABASE_NAME --eval "var collection = 'COLL_NAME' " variety.js,比如我的DATABASE_NAME 是test, COLL_NAME是users,


我事先插入的數據是

db.users.insert({name: "Tom", bio: "A nice guy.", pets: ["monkey", "fish"], someWeirdLegacyKey: "I like Ike!"});
db.users.insert({name: "Dick", bio: "I swordfight.", birthday: new Date("1974/03/14")});
db.users.insert({name: "Harry", pets: "egret", birthday: new Date("1984/03/14")});
db.users.insert({name: "Shanker", bio: "a va?"});


正常的查詢Users的回顯是這樣的

> db.users.find()
{ "_id" : ObjectId("56cfc28fbdae9b9a922a19cb"), "name" : "Tom", "bio" : "A nice guy", "pets" : [  "monkey",  "fish" ], "someWeirdLegacyKey" :                                                                                     "I like ike!" }
{ "_id" : ObjectId("56cfc2acbdae9b9a922a19cc"), "name" : "Dick", "bio" : "I swordfight." }
{ "_id" : ObjectId("56cfc2c6bdae9b9a922a19cd"), "name" : "Harry", "pets" : "egret" }
{ "_id" : ObjectId("56cfc2e0bdae9b9a922a19ce"), "name" : "Shanker", "bio" : "caca" }


用Variety查詢結果是這樣的

mongo test --eval "var collection = 'users'" variety.js
MongoDB shell version: 2.4.9
connecting to: test
Variety: A MongoDB Schema Analyzer
Version 1.5.0, released 14 May 2015
Using collection of "users"
Using query of { }
Using limit of 4
Using maxDepth of 99
Using sort of { "_id" : -1 }
Using outputFormat of "ascii"
Using persistResults of false
Using resultsDatabase of "varietyResults"
Using resultsCollection of "usersKeys"
Using resultsUser of null
Using resultsPass of null
Using plugins of [ ]
+--------------------------------------------------------------------+
| key                | types                | occurrences | percents |
| ------------------ | -------------------- | ----------- | -------- |
| _id                | ObjectId             |           4 |    100.0 |
| name               | String               |           4 |    100.0 |
| bio                | String               |           3 |     75.0 |
| pets               | String (1),Array (1) |           2 |     50.0 |
| someWeirdLegacyKey | String               |           1 |     25.0 |
+--------------------------------------------------------------------+

是不是格式很友好,很容易讀懂了呢?


如果數據庫用的不是默認端口,可以用--port參數:

mongo DATABASE_NAME --port 27111 --eval " var collection = 'COLL_NAME' " variety.js


如果db文件不在默認文件,可以用--dbpath參數:

mongo DATABASE_NAME --dbpath /path/to/database/folder --eval "var collection = 'COLL_NAME' " variety.js


如果需要對查詢進行排序的話可以這樣用:

mongo DATABASE_NAME --eval "var collection = 'COLL_NAME', sort = { date : -1 }" variety.js


如果需要JSON的輸出格式的話可以這樣用:

mongo DATABASE_NAME --eval "var collection = 'users', outputFormat = 'json' " variety.js


如果一個collection有10億個數據,我們可以限制查詢的數量,用limit來限定:


mongo DATABASE_NAME --eval "var collection ='users', limit = 1000 " variety.js

如果某個colletions嵌套的層數太多了,可以用maxDepth來限制查詢:


db.users.insert({name:"Walter", someNestedObject:{a:{b:{c:{d:{e:1}}}}}});
[ibmcloud@bravo:~/variety04:05]$mongo test --eval "var collection = 'users' " variety.js
MongoDB shell version: 2.4.9
connecting to: test
Variety: A MongoDB Schema Analyzer
Version 1.5.0, released 14 May 2015
Using collection of "users"
Using query of { }
Using limit of 5
Using maxDepth of 99
Using sort of { "_id" : -1 }
Using outputFormat of "ascii"
Using persistResults of false
Using resultsDatabase of "varietyResults"
Using resultsCollection of "usersKeys"
Using resultsUser of null
Using resultsPass of null
Using plugins of [ ]
+----------------------------------------------------------------------------+
| key                        | types                | occurrences | percents |
| -------------------------- | -------------------- | ----------- | -------- |
| _id                        | ObjectId             |           5 |    100.0 |
| name                       | String               |           5 |    100.0 |
| bio                        | String               |           3 |     60.0 |
| pets                       | String (1),Array (1) |           2 |     40.0 |
| someNestedObject           | Object               |           1 |     20.0 |
| someNestedObject.a         | Object               |           1 |     20.0 |
| someNestedObject.a.b       | Object               |           1 |     20.0 |
| someNestedObject.a.b.c     | Object               |           1 |     20.0 |
| someNestedObject.a.b.c.d   | Object               |           1 |     20.0 |
| someNestedObject.a.b.c.d.e | Number               |           1 |     20.0 |
| someWeirdLegacyKey         | String               |           1 |     20.0 |
+----------------------------------------------------------------------------+
[ibmcloud@bravo:~/variety05:06]$mongo test --eval "var collection = 'users', maxDepth = 3" variety.js
MongoDB shell version: 2.4.9
connecting to: test
Variety: A MongoDB Schema Analyzer
Version 1.5.0, released 14 May 2015
Using collection of "users"
Using query of { }
Using limit of 5
Using maxDepth of 3
Using sort of { "_id" : -1 }
Using outputFormat of "ascii"
Using persistResults of false
Using resultsDatabase of "varietyResults"
Using resultsCollection of "usersKeys"
Using resultsUser of null
Using resultsPass of null
Using plugins of [ ]
+----------------------------------------------------------------------+
| key                  | types                | occurrences | percents |
| -------------------- | -------------------- | ----------- | -------- |
| _id                  | ObjectId             |           5 |    100.0 |
| name                 | String               |           5 |    100.0 |
| bio                  | String               |           3 |     60.0 |
| pets                 | String (1),Array (1) |           2 |     40.0 |
| someNestedObject     | Object               |           1 |     20.0 |
| someNestedObject.a   | Object               |           1 |     20.0 |
| someNestedObject.a.b | Object               |           1 |     20.0 |
| someWeirdLegacyKey   | String               |           1 |     20.0 |
+----------------------------------------------------------------------+


如果需要制定條件的查詢,比如carddAbout為true的,可以這樣:

mongo DATABASE_NAME --eval "var collection = 'COLL_NAME', query = {'caredAbout':true}" variety.js

需要注意的是,Variety在對數據結構進行分析的時候,實際是用MapReduce來做的,會進行全表掃描操作,所以如果是對線上庫進行分析,那么建議最好使用一個不提供服務的備份庫或者在業務低峰來做。避免給線上業務造成壓力。



參考地址:

http://www.acetolyne.net/Projects7/node/48

https://github.com/variety/variety

http://www.mongoing.com/archives/2282



向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

永定县| 阿拉尔市| 自贡市| 浦县| 平凉市| 大方县| 长沙市| 忻州市| 大庆市| 体育| 甘德县| 兴文县| 绿春县| 兴安县| 潮州市| 上犹县| 兰考县| 西乌| 什邡市| 通城县| 普兰店市| 车致| 临海市| 阿图什市| 孝感市| 奇台县| 福建省| 渝中区| 九江市| 鲁甸县| 五寨县| 沂源县| 肇庆市| 芒康县| 瑞丽市| 巴中市| 丹巴县| 广饶县| 昌邑市| 三门县| 巴里|