var recordsInStore = 25000; var baseName = 'testMultiWr'; var objectStoreName = 'store'; self.onmessage = function (oEvent) { if (oEvent.data.storeNb != null) PopulateOneStore(oEvent.data.storeNb,0); if(oEvent.data.type && oEvent.data.type == 'GetUniqueItemsBatch') GetUniqueItemsBatch(oEvent.data.keyPath, oEvent.data.value, oEvent.data.requestNo) if(oEvent.data.type && oEvent.data.type == 'GetUniqueItemsCount') GetUniqueItemsCount(oEvent.data.keyPath, oEvent.data.value, oEvent.data.requestNo) if(oEvent.data.type && oEvent.data.type == 'CountOneStore') CountOneStore(); } indexedDB = webkitIndexedDB; IDBKeyRange = webkitIDBKeyRange; function getIndexName(collumn){ return 'idx' + objectStoreName + '_' + collumn; } function PopulateOneStore(storeNb, start){ var initOpenReq = indexedDB.open(baseName); var startTime = new Date(); initOpenReq.onsuccess = function() { var db = initOpenReq.result; var i = start; var storeStart = storeNb * recordsInStore; var transaction = db.transaction('store' , 'readwrite'); var store = transaction.objectStore('store' ); transaction.oncomplete = function(){ var completeTime = new Date(); ConsoleLog("#Store " + storeNb + " items stored " + i +" in " + (completeTime-startTime)/1000 + " sec"); db.close(); if(i>=recordsInStore) { ConsoleLog("#populating store " + storeNb + " completed."); notifyStorePopulated(storeNb); } else PopulateOneStore(storeNb, i) }; for (; i < start+2500; ++i) { sampleObject.num = storeStart+i; sampleObject.name = RandomNameArray[i%100] + i; sampleObject.firm = firmIDs[i%firmIDs.length]; sampleObject.firm2 = firmIDs[i%5]; sampleObject.firm3 = firmIDs[i%firmIDs.length]; sampleObject.firm4 = firmIDs[i%5]; sampleObject.text1 = i+firmIDs[i%3]; sampleObject.text2 = i+firmIDs[i%12]+RandomNameArray[i%87]; sampleObject.text3 = i+firmIDs[i%11]; sampleObject.text4 = i+firmIDs[i%13]; sampleObject.text5 = i+firmIDs[i%13]; sampleObject.text6 = i+firmIDs[i%15]; sampleObject.text7 = i+RandomNameArray[i%34]; sampleObject.text8 = i+RandomNameArray[i%100]; sampleObject.text9 = i+RandomNameArray[i%73]; sampleObject.text21 = RandomNameArray[i%45]; sampleObject.text22 = RandomNameArray[i%56]; sampleObject.text23 = RandomNameArray[i%100] + RandomNameArray[i%83]; sampleObject.text24 = i+firmIDs[i%12]+RandomNameArray[i%90]; sampleObject.text25 = i+firmIDs[i%11]; sampleObject.text26 = i+firmIDs[i%13]; sampleObject.text27 = i+firmIDs[i%13]; sampleObject.text28 = i+firmIDs[i%15]; sampleObject.text29 = i+RandomNameArray[i%90]; sampleObject.text31 = i+RandomNameArray[i%100]; sampleObject.text32 = i+RandomNameArray[i%73]; sampleObject.text33 = i+RandomNameArray[i%63]; sampleObject.text34 = i+RandomNameArray[i%53]; store.put(sampleObject, storeStart+i); } transaction.onerror = function(err){ ConsoleLog(err); } } } function CountOneStore(){ var initOpenReq = indexedDB.open(baseName); initOpenReq.onsuccess = function() { var db = initOpenReq.result; var startTime = new Date(); var transaction = db.transaction(objectStoreName, 'readonly'); var objectStore = transaction.objectStore(objectStoreName); var countRequest = objectStore.count(); countRequest.onsuccess = function (event) { var completeTime = new Date(); ConsoleLog('total item count ' + event.target.result + ' db item count took '+ (completeTime-startTime)/1000 + ' seconds'); } transaction.oncomplete = function (event) { db.close(); } } } function notifyStorePopulated(storeNb){ self.postMessage({"log":false,'message':"store "+storeNb+" populated"}); } function ConsoleLog(msg){ self.postMessage({"log":true,'message':msg}); } function notifyUniqueWorker(requestID,keyPath, value,message){ self.postMessage({"requestID":requestID, 'keyPath':keyPath, 'value':value, 'message':message}); } var skipItems = [0, 100, 500, 1500, 7500, 9000]; function GetUniqueItemsBatch( keyPath, value, requestNo){ var skip = skipItems[requestNo%6]; var indexName = getIndexName(keyPath); var initOpenReq = indexedDB.open(baseName); var startTime = new Date(); initOpenReq.onsuccess = function() { var db = initOpenReq.result; var transaction = db.transaction(objectStoreName, 'readonly'); var objectStore = transaction.objectStore(objectStoreName); var index = objectStore.index(indexName); var keyRange = IDBKeyRange.only(value); var cursorRequest = index.openCursor(keyRange); var agregate = []; var hasAdvanced = false; cursorRequest.onsuccess = function (event) { if (event.target.result) { if(!hasAdvanced && skip>0) { hasAdvanced = true; event.target.result['advance'](skip); } else{ if(agregate.length>=100) return; if(event.target.result.value[keyPath].indexOf(value) != 0){ return; } agregate.push(event.target.result.value); event.target.result['continue'](); } } }; transaction.oncomplete = function (event) { var completeTime = new Date(); notifyUniqueWorker(requestNo,keyPath, value, '#requestNo#'+requestNo+' #indexed item search query "'+keyPath+'='+ value +'" after skipped ' + skip + ' items, returned '+agregate.length+' items in '+ (completeTime-startTime)/1000 + ' seconds'); agregate = null; cursorRequest = null; }; } } function GetUniqueItemsCount( keyPath, value, requestNo){ var indexName = getIndexName(keyPath); var initOpenReq = indexedDB.open(baseName); var startTime = new Date(); initOpenReq.onsuccess = function() { var db = initOpenReq.result; var transaction = db.transaction(objectStoreName, 'readonly'); var objectStore = transaction.objectStore(objectStoreName); var index = objectStore.index(indexName); var keyRange = IDBKeyRange.only(value); var countRequest = index.count(keyRange); countRequest.onsuccess = function (event) { var completeTime = new Date(); notifyUniqueWorker(requestNo, keyPath, value, '#requestNo#'+requestNo+' #indexed count '+ keyPath +'=' + value + ' returned ' + event.target.result + ' items in '+ (completeTime-startTime)/1000 + ' seconds'); } transaction.oncomplete = function (event) { db.close(); } } } var firmIDs = ["firm",'dsds','432','43243','2432','dsadsad','sa',"1firm",'d1sds','4312','432413','24312','dsadsa1d','s1a',"fir2m",'ds2ds','4352','435243','24532','ds5adsad','s5a',"1fir5m",'d1sds','43512','4324513','245312','dsad5sa1d','s15a']; var sampleObject = {data: Math.random(), firm:'firmata', text1:"r/D(adsdsadada ) > and |", text2:"r/D(dsadaad ) > adsadasdasnd |", text3:"r/D( 432432432432) > sadsadsadsadsadsa( ) > andsadsad |", text4:"r/D( ) > andsadassadsadsadsadsadsa( ) > dsad |", text5:"r/D( ) > ansadsadsadsadsadsa( ) > d |", text6:"r/D( ) > adsadsadsadsadsadsadsa( ) > sadsand |", text7:"r/D( ) > ansadsadsadsadsadsa( ) > d |", text8:"r32432432432432432", text9:"r/dsadadsadsaand |", text10:"r/mdsadsaads and |", text11:"r/Ddsadsadsadsadsadsa( ) > and |", text12:"rdsaadsadsdadadadada/D( ) > and |", text21:"r/D(adsdsadadsadsadsadsadsadsa( ) > a ) > and |", text22:"r/D(dsadaad ) > adsadasdasnd |", text23:"r/D( 432432432432) > andsadsad |", text24:"r/D( ) > andsasadsadsadsadsadsa( ) > dasdsad |", text25:"r/D( ) > andsadsadsadsadsadsa( ) > |", text26:"r/D( ) > adsasadsadsadsadsadsa( ) > dsadsand |", text27:"r/D( ) > andsadsadsadsadsadsa( ) > |", text28:"r32432432432432432", text29:"r/dsadadsadsaansadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > d |", text210:"r/mdsadsaads and |", text211:"r/Ddsadsadsadsasadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > dsadsa( ) > and |", text212:"rdsaadsadsdadadadada/D( ) > and |", text31:"r/D(adsdsadada ) > and |", text32:"r/D(dsadaad ) > adsadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadasdasnd |", text33:"r/D( 432432432432) > andsadsad |", text34:"r/D( ) > andsadasdsad |", text35:"r/D( ) > and |", text36:"r/D( ) > adsadsadsand |", text37:"r/D( ) > and |", text38:"r32432432432432432", text39:"r/dsadadsadsaand |", text310:"r/mdsadsaads and |", text311:"r/Ddsadsadsadsadssadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > adsa( ) > and |", text312:"rdsaadsadsdadadadada/D( ) > and |", text321:"r/D(adsdsadada ) sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > > and |", text322:"r/D(dsadaad ) > adsadasdasnd |", text323:"r/D( 432432432432) > andsadsad |", text324:"r/D( ) > andsadasdsad |", text325:"r/D( ) > and |", text326:"r/D( ) > adsadssadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > adsand |", text327:"r/D( ) > and |", text328:"r32432432432432432", text329:"r/dsadadsadsaand |", text3210:"r/mdsadsaads and |", text3211:"r/Ddsadsadsadsadsadsa( ) > and |", text3212:"rdsaadsadsdadadsadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > adada/D( ) > and |", text42:"r/D(dsadaad ) > adsadasdasnd |", text43:"r/D( 432432432432) > andsadsad |", text44:"r/D( ) > andsasadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > dasdsad |", text45:"r/D( ) > and |", text46:"r/D( ) > adsadsadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsand |", text47:"r/D( ) > and |", text48:"r32432432432432432", text49:"r/dsadadsadsaasadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > nd |", text410:"r/mdsadsaads and |", text411:"r/Ddsadsadsadsadsadsa( ) > and |", text412:"rdsaadsadsdadsadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > adadada/D( ) > and |", text421:"r/D(adsdsadada ) > and |", text422:"r/D(dsadaad ) >sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > adsadasdasnd |", text423:"r/D( 43243243243sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > 2) > andsadsad |", text424:"r/D( ) > andsadasdsad |", text425:"r/D( ) > and |", text426:"r/D( ) > adsadsadsand |", text427:"r/D( ) > and |", text428:"r324324324324sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > 32432", text429:"r/dsadadsadsaand |", text4210:"r/mdsadsaads and |", text4211:"r/Ddsadsadsadsadsadsa( ) > and |", text4212:"rdsaadsadsdadsadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > adadada/D( ) > and |", text431:"r/D(adsdsadada ) > and |", text432:"r/D(dsadaad ) > adsadasdasnd |", text433:"r/D( 432432432sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > 432) > andsadsad |", text434:"r/D( ) > andsadasdsad |", text435:"r/D( ) > and |", text436:"r/D( ) > adsadsadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsand |", text437:"r/D( ) > and |", text438:"r32432432432432432", text439:"r/dsadadsadsaansadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > d |", text4310:"r/mdsadsaads and |", text4311:"r/Ddsadsadsadsadsadsa( ) > and |", text4312:"rdsaadsadsdadadadada/D( ) > and |", text4321:"r/D(adsdsadadasadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > ) > and |", text4322:"r/D(dsadaad ) > adsadasdasnd |", text4323:"r/D( 43243243sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > 2432) > andsadsad |", text4324:"r/D( ) > andsadasdsad |", text4325:"r/D( ) > and |", text4326:"r/D( ) > adssadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > adsadsand |", text4327:"r/D( ) > and |", text4328:"r32432432432432432", text4329:"r/dsadadsadsaand |", text43210:"r/mdsadsaadsadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > s and |", text43211:"r/Ddsadsadsadsadsadsa( ) > and |", text43212:"rdsaadsadsdsadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > adadadada/D( ) > and |", text541:"r/D(adsdsadada ) > and |", text542:"r/D(dsadaad ) > adsadasdasnd |", text543:"r/D( 432432432432) > andsadsad |", text544:"r/D( ) > andsadasdsad |", text545:"r/D( ) > and |", text546:"r/D( ) > adsadsadsand |", text547:"r/D( ) > asadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > nd |", text548:"r32432432432432432", text549:"r/dsadadsadsaand |", text5410:"r/mdsadsaads and |", text5411:"r/Ddsadsadsadsadsadsa( ) > and |", text5412:"rdsaadsadsdadadadada/D( ) > and |", text5421:"r/D(adsdsadada ) > and |", text5422:"r/D(dsadaad ) > adsadasdasnd |", text5423:"r/D( 432432432432) > andsadsad |", text5424:"r/D( ) > andsadasdsad |", text5425:"r/D( ) > and |", text5426:"r/D( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > adsadsadsand |", text5427:"r/D( ) > and |", text5428:"r32432432432432432", text5429:"r/dsadadsadsaand |", text54210:"r/mdsadsaads and |", text54211:"r/Ddsadsadsadsadsadsa( ) > and |", text54212:"rdsaadsadssadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > dadadadada/D( ) > and |", text5431:"r/D(adsdsadada ) > and |", text5432:"r/D(dsadaad ) > adsadasdasnd |", text5433:"r/D( 432432432432) > andsadsad |", text5434:"r/D( ) > andsadasdsad |", text5435:"r/D( ) > and |", text5436:"r/D( ) > adsadsadsand |", text5437:"r/D( ) > and |", text5438:"r32432432432432432", text5439:"r/dsadadsadsaasadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > nd |", text54310:"r/mdsadsaads and |", text54311:"r/Ddsadsadsadsadsadsa( ) > and |", text54312:"rdsaadsadsdadsadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > adadada/D( ) > and |", text54321:"r/D(adsdsadada ) > and |", text54322:"r/D(dsadaad ) > adsadasdasnd |", text54323:"r/D( 432432432432) > andsadsad |", text54324:"r/D( ) > andsadasdsad |", text54325:"r/D( ) > and |", text54326:"r/D( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > adsadsadsand |", text54327:"r/D( ) > and |", text54328:"r324324324sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > 32432432", text54329:"r/dsadadsadsaand |", text543210:"r/mdsadsaads and |", text543211:"r/Ddsadsasadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > dsadsadsadsa( ) > and |", text543212:"rdsaadsadsdadadadada/D( ) > and |", text5442:"r/D(dsadaadsadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > ) > adsadasdasnd |", text5443:"r/D( 432432432432) > andsadsad |", text5444:"r/D( ) > andsadasdsad |", text5445:"r/D( ) > and |", text5446:"r/D( ) > adsadsadsand |", text5447:"r/D( ) > and |", text5448:"r3243243243sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > 2432432", text5449:"r/dsadadsadsaand |", text54410:"r/mdsadsaasadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > ds and |", text54411:"r/Ddsadsadsadsadsadsa( ) > and |", text54412:"rdsaadsadsdadadadada/D( ) > and |", text54421:"r/D(adsdsadasadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > da ) > and |", text54422:"r/D(dsadaad ) > adsadasdasnd |", text54423:"r/D( 432432432432) > andsadsad |", text54424:"r/D( ) > andsadasdsad |", text54425:"r/D( ) > asadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > nd |", text54426:"r/D( ) > adsadsadsand |", text54427:"r/D( ) > and |", text54428:"r32432432432432432", text54429:"r/dsadadssadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > adsaand |", text544210:"r/mdsadsaads and |", text544211:"r/Ddsasadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > dsadsadsadsadsa( ) > and |", text544212:"rdsaadsadsdadadadada/D( ) > and |", text54431:"r/D(adsdsadada ) > and |", text54432:"r/D(dsadaad ) > adsadasdasnd |", text54433:"r/D( 432432432432) > andsadsad |", text54434:"r/D( ) > andsadasdsad |", text54435:"r/D( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > and |", text54436:"r/D( ) > adsadsadsand |", text54437:"r/D( ) > and |", text54438:"r32432432432432432", text54439:"r/dsadadsadsaand |", text544310:"r/mdsadsaads and |", text544311:"r/Ddsasadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > dsadsadsadsadsa( ) > and |", text544312:"rdsaadsadsdadadadada/D( ) > and |", text544321:"r/D(adsdsadada ) > and |", text544322:"r/D(dsadasadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > ad ) > adsadasdasnd |", text544323:"r/D( 432432432432) > andsadsad |", text544324:"r/D( ) > andsadasdsad |", text544325:"r/D( ) > and |", text544326:"r/D( ) > sadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > adsadsadsand |", text544327:"r/D( ) > and |", text544328:"r32432432432432432", text544329:"r/dsadadsadsaand |", text5443210:"r/mdsadsaads and |", text5443211:"r/Ddsadssadsadsadsadsadsa( ) > sadsadsadsadsadsa( ) > adsadsadsadsa( ) > and |", text5443212:"rdsaadsadsdadadadada/D( ) > and |", num:0 }; var RandomNameArray = ['Aaka','Aidoraoi','Aidormian','Aidornath','Aidrass','Aincir','Ainiomnu','Aist','Akin','Alabhel','Alganja','Alhaestah','Alhapo','Aloisia','Alorora','Althinagon', 'Amas','Amioch','Amiroschka','Ammdas','Anador','Ceyu','Chadranan','Chakkafric','Chalidar','Chierebdin','Chintann','Cilyn','Civenas','Dariya','Daslanhir','Dathanhir','Datroddyn', 'Durnornost','Dygarkron','Dymar','Dymorn','Ethodor','Ebarosin','Forgaryk','Foromaiven','Gwilasiper','Gwin','Gwold','Gwombassaz','Hangollyn','Hard','Harminti','Harra','Heldim', 'Hyar','Hyash','Hyastah','Iandembar','Iane','Ianu','Icarcistir','Icargg','Idaromorn','Iltin','Imraheika','Indangolac','Indo','Ingath','Ingrindry','Iniomoru', 'Jezrello','Jhabacca','Jhabrisin','Jhain','Jhako','Jhaleb','Jhalromer','Jillyar','Jindrinas','Jinjin','Jinthinee','Jircyn','Jirigath','Jirramand','Joma','Jomer','Jonnidain', 'Jonyagolow','Joschnick','Kaithradan','Kajava','Kali','Odimane','Kalis','Madh','Madimrik','Midar','Mider','Midoliadis','Midrist','Mirek', 'Owythad','Ozatiarn','Paminda','Para','Peattos','Pelen','Penadaroma','Penesin','Penorbus','Peras','Peregasaz','Peria','Perik','Pulow','Quel','Raangori','Vras','Vrazatiri','Ziorgarcar', 'Zolon','Zorderivaz','Zorgartus','Zorolon','Zchergeli','dsadadsa','dsadadsa','dsadadsa','dsadadsa','dsadadsa'];