为区分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