久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    cassandra(三)--編寫java代碼對分布式數據庫進行操作 - Java綜合 - Java - JavaEye論壇

     ShangShujie 2010-09-14
    本文主要關注兩個部分,
    1. 怎么寫一個最簡單cassandra的sample
    2. 通過代碼,了解cassandra的數據模型及隱藏在后面的交互邏輯


    步驟一:
    首先我們創建一個工程,然后將cassandra/lib目錄下的包,導入到我們的工程中。
    步驟二:
    創建一個類,內容如下:
    Java代碼
    1. import org.apache.cassandra.thrift.Cassandra;  
    2. import org.apache.cassandra.thrift.Column;  
    3. import org.apache.cassandra.thrift.ColumnPath;  
    4. import org.apache.cassandra.thrift.ConsistencyLevel;  
    5. import org.apache.cassandra.thrift.InvalidRequestException;  
    6. import org.apache.cassandra.thrift.NotFoundException;  
    7. import org.apache.cassandra.thrift.TimedOutException;  
    8. import org.apache.cassandra.thrift.UnavailableException;  
    9. import org.apache.thrift.TException;  
    10. import org.apache.thrift.protocol.TBinaryProtocol;  
    11. import org.apache.thrift.transport.TSocket;  
    12. import org.apache.thrift.transport.TTransport;  
    13. import org.apache.thrift.transport.TTransportException;  
    14.   
    15.   
    16.  public class SampleOne {    
    17.      static Cassandra.Client cassandraClient;    
    18.      static TTransport socket;  
    19.      
    20.      
    21.      private static void init() throws TTransportException {    
    22.          String server = "192.168.1.129";    
    23. //       String server = "localhost";  
    24.          int port = 9160;    
    25.      
    26.          /* 首先指定cassandra server的地址 */    
    27.          socket = new TSocket(server, port);    
    28.          System.out.println(" connected to " + server + ":" + port + ".");    
    29.      
    30.      
    31.          /* 指定通信協議為二進制流協議 */    
    32.          TBinaryProtocol binaryProtocol = new TBinaryProtocol(socket, falsefalse);    
    33.          cassandraClient = new Cassandra.Client(binaryProtocol);    
    34.      
    35.      
    36.          /* 建立通信連接 */    
    37.          socket.open();    
    38.      }    
    39.      
    40.      
    41.      public static void main(String[] args) throws TException, TimedOutException, InvalidRequestException, UnavailableException, NotFoundException {    
    42.          /* 初始化連接 */    
    43.          init();    
    44.      
    45.      
    46.          /* 選擇需要操作的Keyspaces, 可以理解成數據庫的表 */    
    47.          String keyspace= "Keyspace1";    
    48.          String row = "employee";    
    49.      
    50.          /* 創建一個Table Name */    
    51.          String tableName = "Standard2";  
    52.            
    53.          /* 插入一條記錄 */  
    54.          insertOrUpdate(keyspace,tableName,row,"name","happy birthday!",System.currentTimeMillis());  
    55.          /* 刪除一條記錄 */  
    56.          //delete(keyspace,tableName,row,"name",System.currentTimeMillis());  
    57.          /* 獲取一條記錄 (由于插入和刪除是同一條記錄,有可能會檢索不到哦!請大家主意!*/  
    58.          Column column = getByColumn(keyspace,tableName,row,"name", System.currentTimeMillis());  
    59.          System.out.println("read row " + row);    
    60.          System.out.println("column name " + ":" + new String(column.name));    
    61.          System.out.println("column value" + ":" + new String(column.value));    
    62.          System.out.println("column timestamp" + ":" + (column.timestamp));    
    63.            
    64.          close();  
    65.      }  
    66.        
    67.      /** 
    68.       * 插入記錄 
    69.       */  
    70.      public static void insertOrUpdate(String tableSpace,String tableName, String rowParam,String ColumnName,String ColumnValue,long timeStamp)    
    71.         throws TException, TimedOutException, InvalidRequestException, UnavailableException, NotFoundException{  
    72.          /* 選擇需要操作的Keyspaces, 存放數據表所在的空間位置 */    
    73.          String keyspace= tableSpace;  
    74.          /* 數據所在的行標 */  
    75.          String row = rowParam;    
    76.      
    77.          /* 創建一個column path */    
    78.          ColumnPath col = new ColumnPath(tableName);    
    79.          col.setColumn(ColumnName.getBytes());   
    80.            
    81.          /* 執行插入操作,指定keysapce, row, col, 和數據內容, 后面兩個參數一個是timestamp, 另外一個是consistency_level  
    82.           * timestamp是用來做數據一致性保證的, 而consistency_level是用來控制數據分布的策略,前者的理論依據是bigtable, 后者的理論依據是dynamo  
    83.           */    
    84.         cassandraClient.insert(keyspace, row, col,"i don't know".getBytes(), System.currentTimeMillis(), ConsistencyLevel.ONE);  
    85.      }  
    86.        
    87.      /** 
    88.       * 刪除記錄 
    89.       */  
    90.      public static void delete(String tableSpace,String tableName, String rowParam,String ColumnName,long timeStamp)   
    91.         throws TException, TimedOutException, InvalidRequestException, UnavailableException, NotFoundException{  
    92.          /* 選擇需要操作的Keyspaces, 存放數據表所在的空間位置 */    
    93.          String keyspace= tableSpace;  
    94.          /* 數據所在的行標 */  
    95.          String row = rowParam;    
    96.      
    97.          /* 創建一個column path */    
    98.          ColumnPath col = new ColumnPath(tableName);    
    99.          col.setColumn(ColumnName.getBytes());   
    100.            
    101.          /* 執行刪除操作,指定keysapce, row, col, 后面兩個參數一個是timestamp, 另外一個是consistency_level  
    102.           * timestamp是用來做數據一致性保證的, 而consistency_level是用來控制數據分布的策略,前者的理論依據是bigtable, 后者的理論依據是dynamo  
    103.           */    
    104.         cassandraClient.remove(keyspace, row, col, System.currentTimeMillis(), ConsistencyLevel.ONE);  
    105.      }  
    106.        
    107.      /**  
    108.       * 獲取數據  
    109.       */  
    110.      public static Column getByColumn(String tableSpace,String tableName, String rowParam,String ColumnName,long timeStamp)   
    111.     throws TException, TimedOutException, InvalidRequestException, UnavailableException, NotFoundException{  
    112.       /* 選擇需要操作的Keyspaces, 存放數據表所在的空間位置 */    
    113.       String keyspace= tableSpace;   
    114.       /* 數據所在的行標 */  
    115.       String row = rowParam;    
    116.   
    117.       /* 創建一個column path */    
    118.       ColumnPath col = new ColumnPath(tableName);    
    119.       col.setColumn(ColumnName.getBytes());   
    120.         
    121.       /* 執行查詢操作,指定keysapce, row, col, timestamp  
    122.        * timestamp是用來做數據一致性保證的, 而consistency_level是用來控制數據分布的策略,前者的理論依據是bigtable, 后者的理論依據是dynamo  
    123.        */    
    124.       Column column = cassandraClient.get(keyspace, row, col, ConsistencyLevel.ONE).column;    
    125.       return column;  
    126.      }  
    127.        
    128.        
    129.      /** 
    130.       * 關閉當前的遠程訪問連接 
    131.       */  
    132.      public static void close() {  
    133.          socket.close();  
    134.     }  
    135.  }    

    為了比較好的理解這些名詞解釋,我們先看看cassandra的數據模型:


    Cassandra 的數據模型的基本概念:
    keyspace:
    用于存放 ColumnFamily 的容器,相當于關系數據庫中的 Schema 或 database,
    ColumnFamily :
    用于存放 Column 的容器,類似關系數據庫中的 table 的概念。

    SuperColumn :
    它是一個特列殊的 Column, 它的 Value 值可以包函多個 Column
    Java代碼
    1. {   // 這是一個SuperColumn  
    2.     name: "李明杰",  
    3.    // 包含一系列的Columns  
    4.    value: {  
    5.     street: {name: "street", value: "1234 x street", timestamp: 123456789},  
    6.     city: {name: "city", value: "san francisco", timestamp: 123456789},  
    7.     zip: {name: "zip", value: "94107", timestamp: 123456789},  
    8.    }  
    9. }  

    Columns:
    Cassandra 的最基本單位。由 name , value , timestamp 組成
    Java代碼
    1. {  // 這是一個column  
    2.   name: "李明杰",  
    3.   value: "mydream.limj@gmali.com",  
    4.   timestamp: 123456789  
    5. }   


    cassandra的數據模型主要就是由上述幾種模型構建而成的,很簡單吧,的確是這樣,最大的好處就是讀寫數據的API非常簡單.
    • 大小: 11.5 KB

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 少妇人妻真实偷人精品| 天天夜碰日日摸日日澡性色AV| 国产精品福利自产拍在线观看| 小12萝8禁用铅笔自慰喷水| 亚洲国产午夜福利精品| 国产成人啪精品视频免费APP| 肉感饱满中年熟妇日本| 国产一区二区波多野结衣| 秋霞电影院午夜无码免费视频| 欧美亚洲国产一区二区三区| 不卡一区二区国产在线| 老色鬼久久亚洲AV综合| 国产不卡av一区二区| 久久久久久亚洲精品成人| 高清中文字幕一区二区| 国产女人高潮视频在线观看| 亚洲第一精品一二三区| 国产精品久久久久久AV福利 | 日本一卡2卡3卡4卡5卡精品视频 | 精品人妻伦九区久久AAA片| 亚洲午夜成人精品电影在线观看| 精品人妻无码专区在中文字幕| 加勒比无码人妻东京热| 一本色道久久综合亚洲精品| 国产精品 欧美 亚洲 制服| 人妻av无码系列一区二区三区| 精品一区二区成人精品| 国产成人精品视频不卡| 少妇又色又紧又爽又刺激视频| 午夜成年男人免费网站| 无码日韩精品一区二区三区免费| 午夜性色一区二区三区不卡视频| 亚洲日本欧洲二区精品| 波多野结衣乳巨码无在线观看| 熟妇人妻不卡中文字幕| 国产成人午夜福利院| 澳门永久av免费网站| 久久久亚洲AV波多野结衣| 欧美大屁股流白浆XXXX| 疯狂做受XXXX高潮国产| 久久精品国产亚洲av麻豆软件|