zoukankan      html  css  js  c++  java
  • HBase中缓存的优先级

    ava代码  收藏代码
    1. // Instantiate priority buckets  
    2. BlockBucket bucketSingle = new BlockBucket(bytesToFree, blockSize,  
    3.     singleSize());  
    4. BlockBucket bucketMulti = new BlockBucket(bytesToFree, blockSize,  
    5.     multiSize());  
    6. BlockBucket bucketMemory = new BlockBucket(bytesToFree, blockSize,  
    7.     memorySize());  
    8.   
    9. // Scan entire map putting into appropriate buckets  
    10. for(CachedBlock cachedBlock : map.values()) {  
    11.   switch(cachedBlock.getPriority()) {  
    12.     case SINGLE: {  
    13.       bucketSingle.add(cachedBlock);  
    14.       break;  
    15.     }  
    16.     case MULTI: {  
    17.       bucketMulti.add(cachedBlock);  
    18.       break;  
    19.     }  
    20.     case MEMORY: {  
    21.       bucketMemory.add(cachedBlock);  
    22.       break;  
    23.     }  
    24.   }  
    25. }  
    26.   
    27. PriorityQueue<BlockBucket> bucketQueue =  
    28.   new PriorityQueue<BlockBucket>(3);  
    29.   
    30. bucketQueue.add(bucketSingle);  
    31. bucketQueue.add(bucketMulti);  
    32. bucketQueue.add(bucketMemory);  
    33.   
    34. int remainingBuckets = 3;  
    35. long bytesFreed = 0;  
    36.   
    37. BlockBucket bucket;  
    38. while((bucket = bucketQueue.poll()) != null) {  
    39.   long overflow = bucket.overflow();  
    40.   if(overflow > 0) {  
    41.     long bucketBytesToFree = Math.min(overflow,  
    42.       (bytesToFree - bytesFreed) / remainingBuckets);  
    43.     bytesFreed += bucket.free(bucketBytesToFree);  
    44.   }  
    45.   remainingBuckets--;  
    46. }  

        hbase内部的blockcache分三个队列:single、multi以及memory,分别占用25%,50%,25%的大小。这涉及到family属性中的in-memory选项,默认是false。
        设为false的话,第一次访问到该数据时,会将它写入single队列,否则写入memory队列。当再次访问该数据并且在single中读到了该数据时,single会升级为multi
        这三个队列其实是在共用blockcache的资源,区别是在LRU淘汰数据时,single会优先淘汰,其次为multi,最后为memory。

        所以结论有两点:
        1 同一个family不会占用全部的blockcache资源
        2 当某些family特别重要时,可以将它的in-memory设为true,单独使用一个缓存队列,保证cache的优先使用
  • 相关阅读:
    【Java学习系列】第3课--Java 高级教程
    【夯实PHP基础】nginx php-fpm 输出php错误日志
    【夯实Mysql基础】MySQL性能优化的21个最佳实践 和 mysql使用索引
    【架构设计】分布式文件系统 FastDFS的原理和安装使用
    【13】2016.12.13 周二--《小结2016》
    【诗词歌赋】2016.12.15 周四--文言鸿儒《年终的日常》
    【算法】(查找你附近的人) GeoHash核心原理解析及代码实现
    【夯实Nginx基础】Nginx工作原理和优化、漏洞
    【夯实PHP基础】PHP的反射机制
    HTML DOM简易学习笔记
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6205185.html
Copyright © 2011-2022 走看看