<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      HTable和HTablePool使用注意事項

      HTable和HTablePool都是HBase客戶端API的一部分,可以使用它們對HBase表進行CRUD操作。下面結合在項目中的應用情況,對二者使用過程中的注意事項做一下概括總結。

      HTable

      HTable是HBase客戶端與HBase服務端通訊的Java API對象,客戶端可以通過HTable對象與服務端進行CRUD操作(增刪改查)。它的創建很簡單:

      Configuration conf = HBaseConfiguration.create();
      HTable table = new HTable(conf, "tablename");
      //TODO CRUD Operation…

      HTable使用時的一些注意事項:

      1.   規避HTable對象的創建開銷

      因為客戶端創建HTable對象后,需要進行一系列的操作:檢查.META.表確認指定名稱的HBase表是否存在,表是否有效等等,整個時間開銷比較重,可能會耗時幾秒鐘之長,因此最好在程序啟動時一次性創建完成需要的HTable對象,如果使用Java API,一般來說是在構造函數中進行創建,程序啟動后直接重用。

      2.   HTable對象不是線程安全的

      HTable對象對于客戶端讀寫數據來說不是線程安全的,因此多線程時,要為每個線程單獨創建復用一個HTable對象,不同對象間不要共享HTable對象使用,特別是在客戶端auto flash被置為false時,由于存在本地write buffer,可能導致數據不一致。

      3.   HTable對象之間共享Configuration

      HTable對象共享Configuration對象,這樣的好處在于:

      • 共享ZooKeeper的連接:每個客戶端需要與ZooKeeper建立連接,查詢用戶的table regions位置,這些信息可以在連接建立后緩存起來共享使用;
      • 共享公共的資源:客戶端需要通過ZooKeeper查找-ROOT-和.META.表,這個需要網絡傳輸開銷,客戶端緩存這些公共資源后能夠減少后續的網絡傳輸開銷,加快查找過程速度。

      因此,與以下這種方式相比:

      HTable table1 = new HTable("table1");
      HTable table2 = new HTable("table2");

      下面的方式更有效些:

      Configuration conf = HBaseConfiguration.create();
      HTable table1 = new HTable(conf, "table1");
      HTable table2 = new HTable(conf, "table2");

      備注:即使是高負載的多線程程序,也并沒有發現因為共享Configuration而導致的性能問題;如果你的實際情況中不是如此,那么可以嘗試不共享Configuration。

      HTablePool

      HTablePool可以解決HTable存在的線程不安全問題,同時通過維護固定數量的HTable對象,能夠在程序運行期間復用這些HTable資源對象。

      Configuration conf = HBaseConfiguration.create();
      HTablePool pool = new HTablePool(conf, 10);

      1.   HTablePool可以自動創建HTable對象,而且對客戶端來說使用上是完全透明的,可以避免多線程間數據并發修改問題。

      2.   HTablePool中的HTable對象之間是公用Configuration連接的,能夠可以減少網絡開銷。

      HTablePool的使用很簡單:每次進行操作前,通過HTablePool的getTable方法取得一個HTable對象,然后進行put/get/scan/delete等操作,最后通過HTablePool的putTable方法將HTable對象放回到HTablePool中。

      下面是個使用HTablePool的簡單例子:

      public void createUser(String username, String firstName, String lastName, String email, String password, String roles) throws IOException {
        HTable table = rm.getTable(UserTable.NAME);
        Put put = new Put(Bytes.toBytes(username));
        put.add(UserTable.DATA_FAMILY, UserTable.FIRSTNAME,
        Bytes.toBytes(firstName));
        put.add(UserTable.DATA_FAMILY, UserTable.LASTNAME,
          Bytes.toBytes(lastName));
        put.add(UserTable.DATA_FAMILY, UserTable.EMAIL, Bytes.toBytes(email));
        put.add(UserTable.DATA_FAMILY, UserTable.CREDENTIALS,
          Bytes.toBytes(password));
        put.add(UserTable.DATA_FAMILY, UserTable.ROLES, Bytes.toBytes(roles));
        table.put(put);
        table.flushCommits();
        rm.putTable(table);
      }

      至于多線程使用HTablePool的真實性能情況,需要通過實際的測試工作得到。

       

      posted on 2012-07-11 16:40  大圓那些事  閱讀(20784)  評論(4)    收藏  舉報

      導航

      主站蜘蛛池模板: 国产睡熟迷奷系列网站| 成人国产精品中文字幕| 伊人久久大香线蕉av五月天| 欧美性猛交xxxx乱大交丰满| 亚洲国产欧美在线看片一国产| 欧美人与动欧交视频| 最新亚洲人成网站在线观看| 囯产精品一区二区三区线| 偷自拍另类亚洲清纯唯美| 99精品国产成人一区二区| 国产欧美另类精品久久久| 乱人伦中文字幕成人网站在线| 一个人看的www免费高清视频| 福利一区二区在线观看| 又黄又爽又色的少妇毛片| 公与淑婷厨房猛烈进出视频免费| 91中文字幕在线一区| 综合在线 亚洲 成人 欧美 | 美姑县| av老司机亚洲精品天堂| 亚洲精品第一区二区在线| 国产免费网站看v片元遮挡| 亚洲区欧美区综合区自拍区| 国产精品自拍实拍在线看| 少妇被粗大的猛进69视频| 蜜桃亚洲一区二区三区四| 99RE8这里有精品热视频| 国产精品麻豆成人av电影艾秋| 国产午夜伦伦午夜伦无码| 亚洲国产中文字幕精品| 开江县| 中文国产日韩欧美二视频| 国产精品黑色丝袜在线观看| 国产999久久高清免费观看| 色综合人人超人人超级国碰| 狠狠色丁香婷婷综合尤物| 一本色道国产在线观看二区| 精品久久精品久久精品九九| 亚洲综合精品中文字幕| 熟女人妻视频| 性色av一区二区三区精品|