爲區分NqSQL不同的數據存儲和訪問方式,先分類:
- 文檔存儲:MongoDB和CouchDB
- 鍵值存儲:(內存裏的,可持久化的,甚至有序的)Redis和BerkeleyDB
- 列族存儲:HBase和Hypertable
- 最終一致的鍵值存儲:Apache Cassandra和Voldermot
MongoDB可以存儲任意數據集合們只要數據可以用JSON式的對象層次結構表示,還只是BSON,即二進制編碼序列化JSON結構。
Mongo shell命令:db.logdata.insert();或者是用save方法,記錄在集合中存在則更新,沒有則插入。
查詢:var cursor = db.logdata.find() find中可以添加參數和查詢條件,或者過濾條件,可使用正則表達式
while(cursor.hasNext()) printjson(cursor.next());
遊標或者迭代器在關係型數據庫和MongoDB中很常見。
Redis數據存儲
Redis命令行客戶端(redis-cli):
- 啓動redis-cli並確認工作正常,進入redis目錄。
- 執行redis-server啓動redis服務器。
- 默認配置直接運行./redis-server,接着運行redis-cli連接服務器。redis服務器端口默認是6379。
保存鍵值對:./redis-cli set akey "avalue"
獲取鍵值對:./redis-cli get akey
sadd用來添加集合成員。
redis支持數據結構:
- 列表,更準確說是鏈表
- 集合
- 有序集合
- 哈希鍵值對集合
- 字符串
redis中鍵的命名體系:object-type:id:field。如books:1:title表示books集合中標識爲1的成員的title字段。
函數incr用來生成集合中第二個成員的標識,遞增。incrby是按指定量遞增,decr遞減,decrby按指定量遞減。
smembers命令列出集合的數據,sinter支持查詢兩個或多個集合的交集。sunion是並集,sidff是差集。
HBase數據存儲
Nosql的旗手,是google bigtable的開源實現,Hadoop工具。
create 集合名,各個列族
put 集合名,集合1,鍵值對
HBase中,數據不可變,即使重複插入數據也不是更新,而是創建數據集的新版本。這樣避免了數據更新的原子性衝突,存儲中內建了隱式的版本系統。
get 集合名 ,數據 1,{查詢條件}
Apache Cassandra數據存儲
bin/cassandra -f啓動服務器
bin/cassandra -cli -host localhost -port 9160運行客戶端
show keyspaces;
建立keyspaces.
語言綁定
- Thrift
- java
- python
- ruby
- php