1. 程式人生 > >列資料庫--Cassandra資料模型

列資料庫--Cassandra資料模型

1. 概述

Cassandra是一套開源分散式NoSQL資料庫系統,設計思想採用了google的BigTable的資料模型和Amazon的Dynamo的完全分散式架構,因而它具有很好的擴充套件性且不存在單點故障。

本文假設讀者已經具有了SQL資料庫的基本知識,為了幫助讀者更容易的理解Cassandra的資料模型,本文結合SQL資料庫的概念,採用類比的方法介紹Cassandra的資料模型。

2. 資料模型

2.1 Key(對應SQL資料庫中的主鍵)

在Cassandra中,每一行資料記錄是以key/value的形式儲存的,其中key是唯一標識。

2.2 column(對應SQL資料庫中的列)

Cassandra中每個key/value對中的value又稱為column,它是一個三元組,即:name,value和timestamp,其中name需要是唯一的。

2.3 super column(SQL資料庫不支援)

cassandra允許key/value中的value是一個map(key/value_list),即某個column有多個子列。

2.4 Standard Column Family(相對應SQL資料庫中的table)

每個CF由一系列row組成,每個row包含一個key以及其對應的若干column。


2.5 Super Column Family(SQL資料庫不支援)

每個SCF由一系列row組成,每個row包含一個key以及其對應的若干super column。


注意,CF中只能儲存name/value形式的column,不能儲存Super column,同樣,SCF中只能儲存super column。

2.6 Key Space(對應SQL資料庫中的database)

一個Key Space中可包含若干個CF,如同SQL資料庫中一個database可包含多個table。

2.7 排序

在Cassandra的每個row中,所有Column按照會按照name自動進行排序,排序的型別有:BytesType, UTF8Type,LexicalUUIDType, TimeUUIDType, AsciiType,和LongType,不同的排序型別,會產生不同的排序結果,如:

{name: 123, value: “hello there”},

{name: 832416, value: “kjjkbcjkcbbd”},

{name: 3, value: “101010101010″},

{name: 976, value: “kjjkbcjkcbbd”}

採用LongType排序型別,結果是:

{name: 3, value: “101010101010″},

{name: 123, value: “hello there”},

{name: 976, value: “kjjkbcjkcbbd”},

{name: 832416, value: “kjjkbcjkcbbd”}

採用UTF8Type排序型別,結果是:

{name: 123, value: “hello there”},

{name: 3, value: “101010101010″},

{name: 832416, value: “kjjkbcjkcbbd”},

{name: 976, value: “kjjkbcjkcbbd”}

3. 實驗與測試

Cassandra CLI(Command Line Interface)允許使用者通過command的形式管理資料庫(類似於SQL資料庫的CLI),包括元資料管理,資料新增刪除等,但Cassandra CLI沒有像資料庫那樣專門的SQL語言,它只是自定義了一些類似SQL的命令,功能比SQL語言弱得多。

本節介紹了使用Cassandra CLI建立,刪除keyspace,SCF,插入和刪除資料的基本方法。注意,本節採用的Cassandra版本為:apache-cassandra-0.7.5。

具體流程:

首先,啟動cassandra:

進入安裝目錄,使用命令:bin/cassandra

然後,連線到一個節點上

$ ./cassandra-cli -host localhost -port 9160 
Connected to: "Test Cluster" on localhost/9160 
Welcome to cassandra CLI. 
Type 'help;' or '?' for help. Type 'quit;' or 'exit;' to quit.

之後建立一個key space和CF
[[email protected]] create keyspace twissandra with replication_factor=1 
and placement_strategy='org.apache.cassandra.locator.SimpleStrategy'; 
[[email protected]] use twissandra; 
Authenticated to keyspace: twissandra 
------------ 
... schemas agree across the cluster 
[[email protected]]  create column family users with comparator = UTF8Type; 
c21f48d5-8748-11e0-8afd-e700f669bcfc 
Waiting for schema agreement...
 ... schemas agree across the cluster 
[[email protected]] set users['Bob']['phone']='1251892983'; 
Value inserted. 
[[email protected]] set users['Bob']['address']='Haidian,Beijing'; 
Value inserted. 
[[email protected]] set users['Bob']['birthday']='1980-08-09'; 
Value inserted. 
[[email protected]] get users['Bob']; 
=> (column=address, value=4861696469616e2c4265696a696e67, timestamp=1306380804182000) 
=> (column=birthday, value=313938302d30382d3039, timestamp=1306380831152000) 
=> (column=phone, value=31323531383932393833, timestamp=1306380777399000) 
Returned 3 results.

說明:

(1) column family插入資料的方法


(2) Super column family插入資料的方法


從上圖可以看出,SCF能夠支援5維資料空間(分別為:keyspace,column family,super key, key, column name)。

更新phone column的值

[[email protected]]  set users['Bob']['phone']='1251892999'; 
Value inserted.

刪除phone column

[[email protected]] del  users['Bob']['phone']; 
column removed. 
[[email protected]] list users; 
Using default limit of 100 
------------------- 
RowKey: Bob 
=> (column=adress, value=4861696469616e2c4265696a696e67, timestamp=1306380804182000) 
=> (column=birthday, value=313938302d30382d3039, timestamp=1306380831152000)

刪除users CF

[[email protected]] drop column family users; 
f1d9d7a6-874a-11e0-8afd-e700f669bcfc 
Waiting for schema agreement... 
... schemas agree across the cluster 
------

建立SCF

[[email protected]] create column family friends with column_type=Super; 
73264792-8740-11e0-8afd-e700f669bcfc 
Waiting for schema agreement... 
... schemas agree across the cluster 
[[email protected]] set friends['Bob']['address']['family']='BeiJing'; 
Value inserted. 
[[email protected]] set friends['Bob']['address']['company']='BeiJing'; 
Value inserted. 
[[email protected]] get friends['Bob']['address']; 
=> (column=636f6d70616e79, value=4265694a696e67, timestamp=1306380530572000) 
=> (column=66616d696c79, value=4265694a696e67, timestamp=1306380522162000) 
Returned 2 results. 
[[email protected]] get friends['Bob']; 
=> (super_column=61646472657373, 
(column=636f6d70616e79, value=4265694a696e67, timestamp=1306380530572000) 
(column=66616d696c79, value=4265694a696e67, timestamp=1306380522162000)) 
Returned 1 results。

在生產環境中,一般不會採用會採用Cassandra CLI進行資料和元素資料管理,而是編寫thrift client。

4. 參考資料

(1) Cassandra 0.7 CLI指令手冊 – Column Family的管理(1):http://blog.labin.cc/?p=245

(2) Using the Cassandra CLI:

(3) WTF is a SuperColumn? An Intro to the Cassandra Data Model:

相關推薦

資料庫--Cassandra資料模型

1. 概述 Cassandra是一套開源分散式NoSQL資料庫系統,設計思想採用了google的BigTable的資料模型和Amazon的Dynamo的完全分散式架構,因而它具有很好的擴充套件性且不存在單點故障。 本文假設讀者已經具有了SQL資料庫的基本知識,為了幫助讀者

PowerDesigner連線資料庫生成資料模型

我們知道PowerDesigner的物理模型是一個非常好用的功能,一般資料庫的設計者們是喜歡從這裡開始的,但是偶爾也會遇到有資料庫但是沒有模型的情況,這時,我們也可以根據資料庫生成模型 截止到2017年8月10日,PowerDesigner貌似都沒有提供對windows系統64位JD

基於資料庫Rbac資料模型控制權限

@Component("rbacService") public class RbacServiceImpl implements RbacService { private AntPathMatcher antPathMatcher = new AntPathMatcher();

資料庫_資料模型(五)

笛卡爾乘積(cross-product)× 例: R1 sid bid day 22 101 10/10/96 58 103

Android應用開發使用資料庫資料模型示例

背景   幾乎所有應用都有持久化儲存資料的需要。臨時性儲存savedInstanceState顯然無法勝任。為此,Android提供了長期儲存地:手機或平板裝置快閃記憶體上的本地檔案系統。   Android裝置上的應用都有一個沙盒目錄。將檔案儲存在沙盒中,可阻

Cassandra資料模型設計最佳實踐(上)

本文是Cassandra資料模型設計第一篇(全兩篇),該系列文章包含了eBay使用Cassandra資料模型設計的一些實踐。其中一些最佳實踐我們是通過社群學到的,有些對我們來說也是新知識,還有一些仍然具有爭議性,可能在要通過進一步的實踐才能從中獲益。 本文中,我將會講解一些

【無私分享:從入門到精通ASP.NET MVC】從0開始,一起搭框架、做專案(2)建立資料庫資料模型

索引 簡述 我們建立一個數據庫然後生成資料模型,新增ADO.NET實體資料模型,這裡呢常用的有兩種方式,一種是DbFirst,一種是CodeFirst,為了簡便,我們使用DbFirst。有基礎的朋友可以使用CodeFirst,對專案沒有影響的。 專案準備 我們用的工具是:VS 2013 + Sql

Cassandra雜記10-大話Cassandra資料模型

Cassandra是一個開源的分散式資料庫,結合了Dynamo的Key/Value與Bigtable的面向列的特點。 Cassandra的特點如下: 1.靈活的schema:不需要象資料庫一樣預先設計schema,增加或者刪除欄位非常方便(on the fly)。 2.支

Cassandra 資料模型設計總結

結合前段時間使用Cassandra使用過程,團隊簡單總結了Cassandra  資料模型設計,請大家斧正。 1、相關概念 Column:Cassandra中的最基本的儲存單元,用於儲存某一行的資訊;

neo4j資料庫資料模型的理解(入門需看)

GoalsThis guide is designed to walk you through the graph data modeling lifecycle of Neo4j. You will be introduced to the basic process of

Cassandra資料模型設計最佳實踐(上部)

本文是Cassandra資料模型設計第一篇(全兩篇),該系列文章包含了eBay使用Cassandra資料模型設計的一些實踐。其中一些最佳實踐我們是通過社群學到的,有些對我們來說也是新知識,還有一些仍然具有爭議性,可能在要通過進一步的實踐才能從中獲益。 本文中,我將會講解

FMDB(資料庫)與Model(資料模型)的結合使用(CRUD)

一. 宣告   本文意在探討, 也參考了幾位大神的文章, 在文章最後我會把連結貼出來, 如果有敘述錯誤的地方, 請大神們指正! 二. 前言   最近在做專案的時候, 我們有一個"我的訊息"模組, 是這樣設計的, 在本地建立一個數據庫, 收到遠端推送的訊息, 將該條訊息存入資料庫, 進

mysql設定表的時候把時間設定成String型別,java 程式後面涉及到當前時間和資料庫資料的差值計算,怎麼破?

mysql設定表列的時候把時間設定成String型別,java 程式後面涉及到當前時間和資料庫裡資料的差值計算,怎麼破? 如果改資料庫裡面表的列屬性varchar改成time,需要很多地方改進,而且專案已經試運行了,怕出問題? 在java程式中型別轉化很多,String型別可以轉化為date

ECharts簡單的執行示(固定資料和互動資料庫

因為最近正好用到了這個Echarts 所有做下記錄, 首先自己官網下載js(echarts.min.js) 1、使用填充的資料 頁面程式碼如下:  <!-- 引入echarts的js --><script th:src="@{/js/echarts.min.js}">

Django基礎-----ORM簡介、資料庫資料操作及簡單的一對多模型

一:ORM 物件關係對映,是一種程式技術,用於實現面向物件程式語言裡不同型別系統的資料之間的轉換 。從效果上說,它其實是建立了一個可在程式語言裡使用的–“虛擬物件資料庫”。 在ORM框架中,它幫我們把類和資料表進行了一個對映,可以讓我們通過類和類物件就能操作它所對應的表格中的資料。ORM框架

易學筆記-系統分析師考試-第5章 資料庫系統/5.2 資料模型/5.2.3 規範化理論

錯誤關係模式舉例:關係模式R(學生姓名,選修的課程名,任課老師,任課老師地址) 資料冗餘:不同學生的任課老師資料可能重複 修改異常:修改了一個一條記錄的任課老師地址後,其它同一個老師的地址都要修改 插入異常:如果不知道學生姓名,那麼任課老師的資訊就無法插入資料庫

易學筆記-系統分析師考試-第5章 資料庫系統/5.2 資料模型/5.2.2 關係模型

關係模式表示 關係表示為:R(A1,A2,A3,...An),其中R為關係名,A為屬性名 R可以理解為資料表,R的關係是靜態的,A的值是動態的 關係運算 並:指的是兩個關係在集合上的並集,表示為 差:指的是兩個關係區別的集合,表示為:

易學筆記-系統分析師考試-第5章 資料庫系統/5.2 資料模型/5.2.1 資料模式的分類

資料模式 概念:是對現實世界問題的抽象、然後轉換到計算機進行分析和解決 內容包括三部分: 資料結構:是資料模型的基礎 ,描述資料的型別、內容、性質和資料間的聯絡等 資料操作:主要描述在相應資料結構上的操作型別和操作方法 資料約束:描述的

mysql中為使用者設定資料庫資料表,欄位()的訪問許可權

1、mysql中對指定使用者,授予某些資料庫,資料表或者欄位訪問許可權 語法: GRANT PRIVILEGES ON DATA.TABLE TO USERS; 溫馨提示: 授權後可以使用2中命令進行使用者許可權許可權,也可以直接重啟mysql程序方式進行許可權重新整理。 A

Django——模型基礎ORM 資料庫連線配置 模型的建立與對映 資料的增刪改查

Django Django的ORM簡介 資料庫連線配置 模型的建立與對映 資料庫的增刪改查 增資料 查資料及補充 改資料 刪資料     Django的ORM系統分析 ORM概念:物件關係對映(Obje