亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 5820 | 回復: 1
打印 上一主題 下一主題

[MongoDB] MongoDB paddingFactor的含義 [復制鏈接]

論壇徽章:
0
跳轉到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2012-02-22 14:56 |只看該作者 |倒序瀏覽
MongoDB paddingFactor的含義





如果你查一下MongoDB 中Collection的stats,那么你會發(fā)現(xiàn)一個叫paddingFactor的統(tǒng)計數(shù)據(jù),本文我們就來為大家講述這個數(shù)據(jù)的意義。

> db.no_padding.stats()
{
        ...
        "paddingFactor" : 1.4099999999940787,
        ...
}實驗代碼
從名稱上我們可以猜到,這個參數(shù)應該與文檔后面填充的空白空間有關,那么這個參數(shù)是從何而來,又是如何影響我們的存儲的呢?下面先看一個例子,將下面代碼保存為文件/tmp/script.js
  1. var d = db.getSisterDB("padding_test");
  2. d.no_padding.drop();
  3. d.padding.drop();

  4. var no_padding_f = function(count) {
  5.     var start = Date.now();
  6.     for (var i=0; i < count; i++) {
  7.         // Document created with only the _id field
  8.         d.no_padding.insert({_id:i});//注意,這里沒有設置counter1,counter2,counter3三個值
  9.         d.no_padding.update({_id:i}, {$inc : {"counter1": 1}}, true);
  10.         d.no_padding.update({_id:i}, {$inc : {"counter2": 1}}, true);
  11.         d.no_padding.update({_id:i}, {$inc : {"counter3": 1}}, true);
  12.     }
  13.     t = (Date.now() - start)/1000;
  14.     print("no_padding_f runtime: " + t);
  15.     return t;
  16. }

  17. var padding_f = function(count) {
  18.     var start = Date.now();
  19.     for (var i=0; i < count; i++) {
  20.         // Document created with all the counter fields I
  21.         // expect to use, each initialized to 0.
  22.         d.padding.insert({_id:i, counter1: 0, counter2: 0, counter3: 0});//設置了三個值
  23.         d.padding.update({_id:i}, {$inc : {"counter1": 1}}, true);
  24.         d.padding.update({_id:i}, {$inc : {"counter2": 1}}, true);
  25.         d.padding.update({_id:i}, {$inc : {"counter3": 1}}, true);
  26.     }
  27.     t = (Date.now() - start)/1000;
  28.     print("padding_f runtime: " + t);
  29.     return t;
  30. }

  31. var t1 = no_padding_f(200000);
  32. var t2 = padding_f(200000);
  33. var faster = (1-(t2/t1))*100;
  34. print("Padded is " + faster + "% faster\n");

  35. print("storageSize with no padding  : " + d.no_padding.stats().storageSize);
  36. print("paddingFactor with no padding: " + d.no_padding.stats().paddingFactor);
  37. print("storageSize with padding     : " + d.padding.stats().storageSize);
  38. print("paddingFactor with padding   : " + d.padding.stats().paddingFactor);結果
  39. 然后使用MongoDB執(zhí)行這個腳本,得到如下結果:

  40. {nehresma@frodo:/tmp/mongodb-linux-x86_64-1.7.3/bin}$ ./mongo --quiet /tmp/script.js
  41. no_padding_f runtime: 56.031
  42. padding_f runtime: 42.165
  43. Padded is 24.747015045242815% faster

  44. storageSize with no padding  : 27136256
  45. paddingFactor with no padding: 1.4099999999940787
  46. storageSize with padding     : 17614336
  47. paddingFactor with padding   : 1從代碼中我們能看到,這兩個Collection現(xiàn)在的數(shù)據(jù)是一樣的,但是上面紅色數(shù)字確顯示,no padding這個Collection的大小(storageSize)比padding這個Collection的大小大很多。而同樣我們上面說到的paddingFactor系統(tǒng)也分別是1.4和1。
復制代碼
原理解釋
實際上是由于上面不同的數(shù)據(jù)操作方式影響到了paddingFactor參數(shù)。而paddingFactor參數(shù)又會影響到文檔中的空白空間填充量,從而影響了storageSize。

下面我們解釋一下具體過程:

當我們在不預先設定字段的情況下對字段做incr操作,會導致Document的體積變大,在MongoDB中,如果一個Update操作使Document體積變大,如果大到Document目前的總空間無法裝下,就需要對Document進行移動,而MongoDB內(nèi)部有一種類似于機器學習的機制,當其發(fā)現(xiàn)一個Collection中的Document老是以一定比例膨脹,它就會在創(chuàng)建新Document的時候預留出一定比例的空白空間,以防止Update后需要移動數(shù)據(jù)的情況。因為移動數(shù)據(jù)可能會是一個非常耗時的操作。(移動數(shù)據(jù)位置首先需要進行數(shù)據(jù)文件的改寫,然后還要對索引中存儲的數(shù)據(jù)位置進行改寫,所以是非常麻煩的。)

關于paddingFactor之其它
關于paddingFactor,這里再列出幾個知識點:

1.paddingFactor值是一個機器學習的結果,當你用了–repair方法對數(shù)據(jù)庫進行了修復后,這個值會恢復到1

2.數(shù)據(jù)位置移動是一個需要盡量避免的過程,如果是小數(shù)據(jù)量,可能數(shù)據(jù)移動前后的文件都在map到內(nèi)存中了,而如果數(shù)據(jù)量過大,可能就會涉及到磁盤IO操作了

3.需要注意的一點是,即使你預先設定了值再進行incr等數(shù)字操作,如果數(shù)字從32字節(jié)的int增長到64字節(jié)的int,還是會導致數(shù)據(jù)膨脹的。參見這里

來源:tebros.com


論壇徽章:
0
2 [報告]
發(fā)表于 2012-02-24 17:36 |只看該作者
謝謝分享
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復

  

北京盛拓優(yōu)訊信息技術有限公司. 版權所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關心和支持過ChinaUnix的朋友們 轉載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP