日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

cassandra(三)--編寫java代碼對(duì)分布式數(shù)據(jù)庫(kù)進(jìn)行操作 - Java綜合 - Java - JavaEye論壇

 ShangShujie 2010-09-14
本文主要關(guān)注兩個(gè)部分,
1. 怎么寫一個(gè)最簡(jiǎn)單cassandra的sample
2. 通過(guò)代碼,了解cassandra的數(shù)據(jù)模型及隱藏在后面的交互邏輯


步驟一:
首先我們創(chuàng)建一個(gè)工程,然后將cassandra/lib目錄下的包,導(dǎo)入到我們的工程中。
步驟二:
創(chuàng)建一個(gè)類,內(nèi)容如下:
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.          /* 指定通信協(xié)議為二進(jìn)制流協(xié)議 */    
  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, 可以理解成數(shù)據(jù)庫(kù)的表 */    
  47.          String keyspace= "Keyspace1";    
  48.          String row = "employee";    
  49.      
  50.          /* 創(chuàng)建一個(gè)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.          /* 獲取一條記錄 (由于插入和刪除是同一條記錄,有可能會(huì)檢索不到哦!請(qǐng)大家主意!*/  
  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, 存放數(shù)據(jù)表所在的空間位置 */    
  73.          String keyspace= tableSpace;  
  74.          /* 數(shù)據(jù)所在的行標(biāo) */  
  75.          String row = rowParam;    
  76.      
  77.          /* 創(chuàng)建一個(gè)column path */    
  78.          ColumnPath col = new ColumnPath(tableName);    
  79.          col.setColumn(ColumnName.getBytes());   
  80.            
  81.          /* 執(zhí)行插入操作,指定keysapce, row, col, 和數(shù)據(jù)內(nèi)容, 后面兩個(gè)參數(shù)一個(gè)是timestamp, 另外一個(gè)是consistency_level  
  82.           * timestamp是用來(lái)做數(shù)據(jù)一致性保證的, 而consistency_level是用來(lái)控制數(shù)據(jù)分布的策略,前者的理論依據(jù)是bigtable, 后者的理論依據(jù)是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, 存放數(shù)據(jù)表所在的空間位置 */    
  93.          String keyspace= tableSpace;  
  94.          /* 數(shù)據(jù)所在的行標(biāo) */  
  95.          String row = rowParam;    
  96.      
  97.          /* 創(chuàng)建一個(gè)column path */    
  98.          ColumnPath col = new ColumnPath(tableName);    
  99.          col.setColumn(ColumnName.getBytes());   
  100.            
  101.          /* 執(zhí)行刪除操作,指定keysapce, row, col, 后面兩個(gè)參數(shù)一個(gè)是timestamp, 另外一個(gè)是consistency_level  
  102.           * timestamp是用來(lái)做數(shù)據(jù)一致性保證的, 而consistency_level是用來(lái)控制數(shù)據(jù)分布的策略,前者的理論依據(jù)是bigtable, 后者的理論依據(jù)是dynamo  
  103.           */    
  104.         cassandraClient.remove(keyspace, row, col, System.currentTimeMillis(), ConsistencyLevel.ONE);  
  105.      }  
  106.        
  107.      /**  
  108.       * 獲取數(shù)據(jù)  
  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, 存放數(shù)據(jù)表所在的空間位置 */    
  113.       String keyspace= tableSpace;   
  114.       /* 數(shù)據(jù)所在的行標(biāo) */  
  115.       String row = rowParam;    
  116.   
  117.       /* 創(chuàng)建一個(gè)column path */    
  118.       ColumnPath col = new ColumnPath(tableName);    
  119.       col.setColumn(ColumnName.getBytes());   
  120.         
  121.       /* 執(zhí)行查詢操作,指定keysapce, row, col, timestamp  
  122.        * timestamp是用來(lái)做數(shù)據(jù)一致性保證的, 而consistency_level是用來(lái)控制數(shù)據(jù)分布的策略,前者的理論依據(jù)是bigtable, 后者的理論依據(jù)是dynamo  
  123.        */    
  124.       Column column = cassandraClient.get(keyspace, row, col, ConsistencyLevel.ONE).column;    
  125.       return column;  
  126.      }  
  127.        
  128.        
  129.      /** 
  130.       * 關(guān)閉當(dāng)前的遠(yuǎn)程訪問(wèn)連接 
  131.       */  
  132.      public static void close() {  
  133.          socket.close();  
  134.     }  
  135.  }    

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


Cassandra 的數(shù)據(jù)模型的基本概念:
keyspace:
用于存放 ColumnFamily 的容器,相當(dāng)于關(guān)系數(shù)據(jù)庫(kù)中的 Schema 或 database,
ColumnFamily :
用于存放 Column 的容器,類似關(guān)系數(shù)據(jù)庫(kù)中的 table 的概念。

SuperColumn :
它是一個(gè)特列殊的 Column, 它的 Value 值可以包函多個(gè) Column
Java代碼
  1. {   // 這是一個(gè)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. {  // 這是一個(gè)column  
  2.   name: "李明杰",  
  3.   value: "mydream.limj@gmali.com",  
  4.   timestamp: 123456789  
  5. }   


cassandra的數(shù)據(jù)模型主要就是由上述幾種模型構(gòu)建而成的,很簡(jiǎn)單吧,的確是這樣,最大的好處就是讀寫數(shù)據(jù)的API非常簡(jiǎn)單.
  • 大小: 11.5 KB

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多