2015-02-10 70 views
0

我需要在MongoDB(2.6.7)中創建三維數組,以存儲至少x-y-z座標和值。什麼是最有效的方法:應該是什麼結構以及如何快速創建它?
我試圖用下一個腳本,但它的工作長:
在MongoDB中創建多維數據集1000^3的最快方法是什麼?

function insertMatrix3(dbName, colName, numX, numY, numZ) { 
    var col = db.getSiblingDB(dbName).getCollection(colName); 
    var array = []; 
    for (x = 0; x < numX; x++) { 
     for (y = 0; y < numY; y++) { 
      for (z = 0; z < numZ; z++) { 
       array.push(
       { 
        x : x, 
        y : y, 
        z : z, 
        val : 0 
       } 
       ); 
      } 
     } 
     if (x % 5 == 0) { 
      col.insert(array); 
      array = []; 
     } 
    } 
} 
+0

你的腳本到底有多長時間工作?什麼是你最好的時間? – 1Darco1 2015-02-10 09:04:18

+0

其實我沒有等到完成,因爲它花了大約20個小時,我剛剛停止它(在它之前,我檢查了已經創建的數據庫的大小 - 它是153 GB)。我會花不到1小時的時間,但寫入操作(創建數據庫)的優先級低,讀取很重要。我的機器有i5-4670,16GB RAM和普通硬盤。 – alr 2015-02-10 09:08:34

+0

你爲什麼這樣做?瞭解創建這個巨型格子的背景將有助於我們推薦最佳選擇。 – wdberkeley 2015-02-10 17:26:41

回答

0

隨着使用批量操作(這裏是手動: Bulk Write Operations),花了261分鐘來創建這樣的陣列(1000 * 1000 * 1000)。

function insertMatrix3Bulk(dbName, colName, numX, numY, numZ) { 
    var localDB = db.getSiblingDB(dbName); 
    var col = localDB.getCollection(colName); 
    for (x = 0; x < numX; x++) { 
     for (y = 0; y < numY; y++) { 
      var bulk = col.initializeUnorderedBulkOp(); 
      for (z = 0; z < numZ; z++) { 
       bulk.insert(
        { 
         x : x, 
         y : y, 
         z : z, 
         val : 0 
        } 
       ); 
      } 
      bulk.execute(); 
     } 
    } 
} 
相關問題