如何缓存hbase数据以减少下次取数据的时间
缓存从hbase取得的数据的好处是显而易见的,缓存到本地以后,如果下次的输入能够直接从已缓存的本地文件中取得数据就无需再次访问hbase数据库,这样一来数据量大的话可以节省大量的访问hbase数据库的时间。
1 function enterSearch(plate) 2 { 3 searchPlateBegin = new Date(); 4 var plateArray = new Array(); 5 var convertReverseArray = new Array(); 6 if(regex_cache[plate] == null) 7 { 8 9 var strRegEx = convertInput(plate); 10 var regEx = new RegExp(strRegEx); 11 regEx.compile(regEx); 12 13 14 for (var i = 0;i < keyArrayConvert.length;i++) 15 { 16 if (regEx.test(keyArrayConvert[i])) 17 { 18 convertReverseArray.push(keyArray[i]); 19 plateArray.push(keyArrayConvert[i]); 20 } 21 } 22 23 var cacheFileName = (++write_regex_cache_count).toString() + ".json"; 24 25 fs.writeFile("./cache/"+cacheFileName,JSON.stringify(convertReverseArray),function(err){ 26 if(err) throw err; 27 regex_cache[plate] = "./cache/"+cacheFileName; 28 29 30 }); 31 32 var cacheFileName_convert = (++write_regex_cache_count_convert).toString() + "_decoded.json"; 33 34 fs.writeFile("./cache/"+cacheFileName_convert,JSON.stringify(plateArray),function(err){ 35 if(err) throw err; 36 regex_cache_convert[plate] = "./cache/"+cacheFileName_convert; 37 38 }); 39 40 searchPlateEnd = new Date(); 41 42 } 43 else 44 { 45 searchPlateEnd = new Date(); 46 convertReverseArray = JSON.parse(fs.readFileSync(regex_cache[plate],'utf8')); 47 plateArray = JSON.parse(fs.readFileSync(regex_cache_convert[plate],'utf8')); 48 49 }
在这里就是做了一个缓存,把convertReverseArray以不同的文件名的形式缓存到cache目录下。每输入一个plate,先去到regex_cache[plate]中寻找有无数据,如果没有数据说明本地没有相对应的数据,就会调用正则表达式从keyArrayConvert中找到相匹配的数据放至regex_cache[plate]中,如果该数据已存在说明本地文件已有该数据,这是跳到else语句执行相关的操作,如果keyArrayConvert包含的数据巨大的话,采用这种方式可以节省大量时间。