HBase和Redis的应用场景对比

HBase和Redis的功能上比较相似。都是nosql类型的数据库。但是在适用场景上,两者还是有比较明显的区别的。

下面基于读写性能、数据类型、数据量、部署难易、数据可靠性、应用场景、两者的结合等多个维度来比较一下两者。

读写性能:
HBase写快读慢,HBase的读取时长通常是几毫秒,而Redis的读取时长通常是几十微秒。性能相差非常大。

数据类型:
HBase和Redis都支持KV类型。但是Redis支持List、Set等更丰富的类型。

数据量:
Redis支持的数据量通常受内存限制,而HBase没有这个限制,可以存储远超内存大小的数据。

部署难易:
HBase部署需要依赖hadoop、zookeeper等服务,而Redis的部署非常简单。

数据可靠性:
HBase采用WAL,先记录日志再写入数据,理论上不会丢失数据。而Redis采用的是异步复制数据,在failover时可能会丢失数据。

应用场景:
HBase适合做大数据的持久存储,而Redis比较适合做缓存。如果数据丢失是不能容忍的,那就用只能用HBase;如果需要一个高性能的环境,而且能够容忍一定的数据丢失,那完全可以考虑使用Redis。

两者的结合:
HBase可以用来做数据的固化,也就是数据存储,做这个他非常合适。Redis适合做cache。可以用HBase+Redis实现数据仓库加缓存数据库,速度和扩展性都兼顾。

综合上述比较,我们可以看出。这两者都有各自擅长的领域,不存在相互替代。具体选用哪个服务,要根据具体业务场景、数据量选择最合适的方案。

mysql搜索结果按照传入的id顺序排序

记录一下,有用。
SQL: select * from table where id IN (3,6,9,1,2,5,8,7);
这样的情况取出来后,其实,id还是按1,2,3,4,5,6,7,8,9,排序的,但如果我们真要按IN里面的顺序排序怎么办?SQL能不能完成?是否需要取回来后再foreach一下?其实mysql就有这个方法
sql: select * from table where id IN (3,6,9,1,2,5,8,7) order by field(id,3,6,9,1,2,5,8,7);
出来的顺序就是指定的顺序了。

erlang

周末看了两天erlang,太神奇的一种语言了。
使用 erlang ,能轻易的实现并发、分布式,能实现程序的热更新。程序的查错非常方便。
facebook的短消息平台,就是用erlang搭建的。
google著名的 map reduce 和 big table 也都有 erlang 的开源版本。

随着多核cpu的普及,erlang应该会越来越流行了。

给一个erlang的快速排序的例子
qsort([]) -> [];
qsort([H|T]) ->
qsort([X||X<-T,X<h])
++ [H]++
qsort([X||X<-T,X>=H]).

就这么几行代码,就轻松实现了快速排序。

erl 是一种函数式编程语言,和通常咱们用的编程语言不一样。
它的变量只能绑定一次。