日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Cassandra查詢語句CQL的小技巧

和SQL(結(jié)構(gòu)化查詢語言)類似,Cassandra也即將在未來的發(fā)行版本中提供Cassandra查詢語句(CQL)。

站在用戶的角度思考問題,與客戶深入溝通,找到鶴山網(wǎng)站設(shè)計與鶴山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設(shè)計、網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名申請、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋鶴山地區(qū)。

比如使用Keyspace名稱為WebSiteKS,使用CQL表示為:

 
 
 
  1. USE WebSiteKS;

查詢Column Family為Standard1,Key為k的值:

 
 
 
  1. SELECT FROM Standard1 WHERE KEY = "k";

更新Column Family為Standard1,Key為k,Column為c的值:

 
 
 
  1. UPDATE Standard1 WITH ROW("k", COL("c", "hello!"));

更多的有關(guān)CQL的語法詳細信息可以參考官方的文檔:https://svn.apache.org/repos/asf/cassandra/trunk/doc/cql/CQL.html

拋開CQL的語法,深入到Cassandra的內(nèi)部實現(xiàn),其也無非是解析CQL的操作類型,然后將其轉(zhuǎn)化為內(nèi)部的操作接口進行調(diào)用。

USE語句實現(xiàn)邏輯:

 
 
 
  1. case USE: 
  2.     clientState.setKeyspace((String)statement.statement);

這里將Keyspace進行了切換,和直接調(diào)用Thrift API的setKeyspace效果一致。

SELECT語句實現(xiàn)邏輯:

 
 
 
  1. case SELECT: 
  2.     SelectStatement select = (SelectStatement)statement.statement; 
  3.     List avroRows = new ArrayList(); 
  4.     avroResult.type = CqlResultType.ROWS; 
  5.     List rows = null; 
  6.     if (!select.getKeyPredicates().isRange()) 
  7.         rows = multiSlice(keyspace, select); 
  8.     else 
  9.         rows = multiRangeSlice(keyspace, select);

這與調(diào)用Thrift API的mutiSlice或multiRangeSlice效果一致:

UPDATE語句實現(xiàn)邏輯:

 
 
 
  1. case UPDATE: 
  2.     UpdateStatement update = (UpdateStatement)statement.statement; 
  3.     validateColumnFamily(keyspace, update.getColumnFamily()); 
  4.     avroResult.type = CqlResultType.VOID; 
  5.     List rowMutations = new ArrayList(); 
  6.     for (Row row : update.getRows()) 
  7.     { 
  8.         validateKey(row.getKey().getByteBuffer()); 
  9.         RowMutation rm = new RowMutation(keyspace, row.getKey().getByteBuffer()); 
  10.         for (org.apache.cassandra.cql.Column col : row.getColumns()) 
  11.         { 
  12.             rm.add(new QueryPath(update.getColumnFamily(), null, col.getName().getByteBuffer()), 
  13.                    col.getValue().getByteBuffer(), 
  14.                    System.currentTimeMillis()); 
  15.         } 
  16.         rowMutations.add(rm); 
  17.     } 
  18.     try 
  19.     { 
  20.         StorageProxy.mutate(rowMutations, update.getConsistencyLevel()); 
  21.     } 
  22.     catch (org.apache.cassandra.thrift.UnavailableException e) 
  23.     { 
  24.         throw new UnavailableException(); 
  25.     } 
  26.     catch (TimeoutException e) 
  27.     { 
  28.         throw new TimedOutException(); 
  29.     }

這與調(diào)用Thrift API的batch_mutate效果一致:

雖然現(xiàn)在CQL功能還很弱,但是又向前邁向了一大步。

更多關(guān)于Cassandra的文章:http://www.cnblogs.com/gpcuster/tag/Cassandra/


網(wǎng)頁題目:Cassandra查詢語句CQL的小技巧
瀏覽路徑:http://m.5511xx.com/article/ccsehei.html