用 HBase 来存储 zset

标签: 高性能Web架构 | 发表时间:2012-11-08 20:03 | 作者:ideawu
出处:http://www.ideawu.net/blog

虽然内存中有非常丰富的数据结构, 但真正的业务数据一般只有非常少的几种, 据我所知的有: 哈希表(Key-Value), zset(sorted set). 其中, 又以 zset 的业务表达能力最为强大. zset 是元素的集合, 集合中的元素都是唯一的, 并且每个元素都有一个排序权重值, 决定该元素在集合中的线性位置(一维坐标).

在 MySQL 数据库中, 可以用如下表结构来存储 zset:

weight, setname, element
UNIQUE(setname, element)

Redis 本身支持 zset 数据类型. MySQL 方案可存储大数据, 但读性能非常有问题, 因为其排序是在查询进行时动态发生的. Redis 速度快, 但最大的问题是数据量不能超过内存容量. 所以, 需要寻找一种替代的方案.

HBase 不支持 zset, 但可利用其”Key 的有序性和可遍历性”, 通过设计 Key 的结构来实现 zset. 对于 zset 的每一个元素, 需要在 HBase 中存储两条数据:

key=setname|weight|element, value=NULL
key=setname|element, value=score 或者 setname|weight|element

将 Key 中”|”分隔的每一个字段都定长.

读取: 利用 scan
写入/更新: 查询 key=setname|element, 然后删除 key=setname|weight|element, 再插入 key=setname|new_weight|element.
删除: 查询并删除 key=setname|element, 然后删除 key=setname|weight|element

备注: 当然, 这只是说明 HBase 能存储 zset, 并且手工测试读取的性能还不错, 但还未做更多的测试.

Related posts:

  1. HBase 在 Linux 下安装和配置
  2. Redis 导数据的 PHP 脚本
  3. 基于Redis构建系统的经验和教训
  4. Redis被bgsave和bgrewriteaof阻塞的解决方法
  5. MySQL命令行按Delete键输出”~”的问题

相关 [hbase zset] 推荐:

用 HBase 来存储 zset

- - idea's blog
虽然内存中有非常丰富的数据结构, 但真正的业务数据一般只有非常少的几种, 据我所知的有: 哈希表(Key-Value), zset(sorted set). 其中, 又以 zset 的业务表达能力最为强大. zset 是元素的集合, 集合中的元素都是唯一的, 并且每个元素都有一个排序权重值, 决定该元素在集合中的线性位置(一维坐标)..

hbase介绍

- AreYouOK? - 淘宝数据平台与产品部官方博客 tbdata.org
hbase是bigtable的开源山寨版本. 是建立的hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统. 它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作). 主要用来存储非结构化和半结构化的松散数据.

Riak对比HBase

- - NoSQLFan
文章来自 Riak官方wiki,是一篇Riak与HBase的对比文章. Riak官方的对比通常都做得很中肯,并不刻意偏向自家产品. 对比的Riak版本是1.1.x,HBase是0.94.x. Riak 与 HBase 都是基于 Apache 2.0 licensed 发布. Riak 的实现是基于 Amazon 的 Dynamo 论文,HBase 是基于 Google 的 BigTable.

[转]HBase简介

- - 小鸥的博客
   Hbase是一个分布式开源数据库,基于Hadoop分布式文件系统,模仿并提供了基于Google文件系统的Bigtable数据库的所有功能. 其目标是处理非常庞大的表,可以用普通的计算机处理超过10亿行数据,并且有数百万列元素组成的数据表. Hbase可以直接使用本地文件系统或者Hadoop作为数据存储方式,不过为了提高数据可靠性和系统的健壮性,发挥Hbase处理大数据量等功能,需要使用Hadoop作为文件系统.

HBase表设计

- - 互联网 - ITeye博客
默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数据, 直到这 个region足够大了才进行切分. 一种可以加快批量写入速度的方法是通过预先创建一些空的regions,这样当数据写入HBase时,会按 照 region分区情况,在集群内做数据的负载均衡.

HBase Memstore配置

- - 行业应用 - ITeye博客
HBase Memstore配置. 本文为翻译,原英文地址:http://blog.sematext.com/2012/07/16/hbase-memstore-what-you-should-know/.     当regionserver(以下简称RS)收到一个写请求,会将这个请求定位到某个特定的region.

hbase原理

- - CSDN博客云计算推荐文章
1.hbase利用hdfs作为其文件存储系统,利用mapreduce来处理数据,利用zookeeper作为协调工具. 2.行键(row key),类似于主键,但row key是表自带的. 3.列族(column family) ,列(也称作标签/修饰符)的集合,定义表的时候指定的,列是在插入记录的时候动态增加的.

hbase锁机制

- - 数据库 - ITeye博客
博文说明:1、研究版本hbase0.94.12;2、贴出的源代码可能会有删减,只保留关键的代码.   hbase的锁是采用jdk的ReentrantReadWriteLock类实现.   一、HRegion有两种锁:lock、updatesLock,这两种锁均是ReentrantReadWriteLock类的实例,基本上所有的region操作均需要获取lock的read共享锁,在获取了lock的read锁后,如果是增加或者删除等影响数据内容的操作则还需要获取updatesLock的read锁.

Hbase入门

- - CSDN博客云计算推荐文章
Hbase 全称是Hadoop DataBase ,是一种开源的,可伸缩的,高可靠,高性能,面向列的分布式存储系统. 类似于Google的BigTable,其分布式计算采用MapReduce,通过MapReduce完成大块数据加载和全表扫描操作. 文件存储系统是HDFS,通过Zookeeper来完成状态管理协同服务.

[原]HBase StoreFile Compaction

- - 芒果先生Mango的专栏
Store File的合并策略比较复杂,涉及多个参数,合并策略的好坏,直接影响HBase的读写性能. 发现这篇博文:http://blog.csdn.net/azhao_dn/article/details/8867036 对Compaction描述的言简意赅:. hbase为了防止小文件(被刷到磁盘的menstore)过多,以保证保证查询效率,hbase需要在必要的时候将这些小的store file合并成相对较大的store file,这个过程就称之为compaction.