2013-03-18 2 views
0

Я пытаюсь оценить пределы моего текущего проекта ГАЗ. Я использую ScriptDB для обработки обработки, чтобы обойти 6-минутный предел исполнения. Если у меня есть объект, напримерРасчет размера объекта ScriptDB

var userObj{ 

    id: //user email address 
    count: //integer 1-1000 
    trigger: //trigger ID 
    label: //string ~30 char or less 
    folder: //Google Drive folder ID 
    sendto: //'true' or 'false' 
    shareto: //'true' or 'false' 
} 

Как бы рассчитать размер, который этот объект занимает в БД? Я хотел бы спрогнозировать, сколько из этих объектов может существовать одновременно, прежде чем я достигнет предела 200 МБ для нашего домена.

ответ

2

Всякий раз, когда у вас возник вопрос о скрипте google-apps, который не связан с API, сначала попробуйте сначала задать вопросы по JavaScript. В этом случае я нашел JavaScript object size и опробовал принятый ответ в приложении-скрипте. (Фактически, «улучшенный» принятый ответ.) Я вообще ничего не изменил, но воспроизвел его здесь с помощью тестовой функции, чтобы вы могли просто вырезать пасту &, чтобы попробовать ее.

Вот что я получил с тестом stud объекта, в отладчике. screenshot of debugger

Теперь это не идеально - например, это не влияет на размер ключей, которые вы будете использовать в ScriptDB. Another answer взял удар. Но поскольку ваш объект содержит некоторые потенциально огромные значения, такие как адрес электронной почты, длина которого может составлять 256 символов, длина ключа может не иметь большого значения.

// https://stackoverflow.com/questions/1248302/javascript-object-size/11900218#11900218 
function roughSizeOfObject(object) { 

    var objectList = []; 
    var stack = [ object ]; 
    var bytes = 0; 

    while (stack.length) { 
     var value = stack.pop(); 

     if (typeof value === 'boolean') { 
      bytes += 4; 
     } 
     else if (typeof value === 'string') { 
      bytes += value.length * 2; 
     } 
     else if (typeof value === 'number') { 
      bytes += 8; 
     } 
     else if 
     (
      typeof value === 'object' 
      && objectList.indexOf(value) === -1 
     ) 
     { 
      objectList.push(value); 

      for(i in value) { 
       stack.push(value[ i ]); 
      } 
     } 
    } 
    return bytes; 
} 


function Marks() 
{ 
    this.maxMarks = 100; 
} 

function Student() 
{ 
    this.firstName = "firstName"; 
    this.lastName = "lastName"; 
    this.marks = new Marks(); 
} 

function test() { 
    var stud = new Student(); 
    var studSize = roughSizeOfObject(stud); 
    debugger; 
} 
+0

Спасибо за подробный ответ. Это работало очень хорошо. – Greg

Смежные вопросы