自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Cassandra查詢語句CQL的小技巧

數(shù)據(jù)庫
今天我們要討論的是NoSQL數(shù)據(jù)庫中的Cassandra查詢語句CQL小技巧,希望對大家有所幫助。

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

比如使用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<CqlRow> avroRows = new ArrayList<CqlRow>();   
  4.     avroResult.type = CqlResultType.ROWS;   
  5.     List<org.apache.cassandra.db.Row> 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<RowMutation> rowMutations = new ArrayList<RowMutation>();   
  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/

原文鏈接:http://www.cnblogs.com/gpcuster/archive/2010/11/01/1866668.html

【編輯推薦】

  1. MongoDB CEO談NoSQL的大數(shù)據(jù)量處理能力
  2. 拋棄關(guān)系數(shù)據(jù)庫 PHP程序員應(yīng)了解MongoDB的五件事
  3. MongoDB,無模式文檔型數(shù)據(jù)庫簡介
  4. 關(guān)系數(shù)據(jù)庫的末日是否已經(jīng)來臨
  5. 扔掉沉沒成本 嘗試關(guān)系數(shù)據(jù)庫替代品OODBMS
責任編輯:彭凡 來源: 博客園
相關(guān)推薦

2023-09-25 13:15:50

SQL數(shù)據(jù)庫

2010-06-01 16:43:07

Cassandra內(nèi)部

2022-07-04 08:51:43

條件語句JavaScript

2021-02-03 10:46:31

SQL數(shù)據(jù)庫技巧

2018-12-26 09:25:30

SQL ServerSQL語句數(shù)據(jù)庫

2011-03-01 16:30:55

Oracle

2011-03-11 16:25:53

Oracle數(shù)據(jù)庫

2024-01-30 08:43:26

IF 語句JavaScripJS

2010-10-27 16:14:24

Oracle參數(shù)查詢命

2021-11-29 11:11:45

SQL查詢技巧

2022-11-16 09:04:36

SQL查詢SELECT

2023-10-09 18:13:14

MySQL數(shù)據(jù)庫查詢

2024-04-12 08:28:38

優(yōu)化查詢語句PostgreSQL索引

2021-07-16 10:31:29

MySQLDump技巧

2009-10-09 14:45:00

ccna小技巧ccna

2022-11-03 07:30:41

CQLJPQLHQL

2021-12-16 10:53:23

shell命令腳本

2018-11-28 12:30:58

Python命令行編程語言

2014-05-22 14:15:45

Android系統(tǒng)定制小技巧

2015-02-04 10:32:57

Objective-CSwift
點贊
收藏

51CTO技術(shù)棧公眾號