列資料庫--Cassandra資料模型
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