HyperDex学习笔记

 

最近一个NoSQL数据库很火,它高度一致, 高度可搜索, 非常快。几乎全面超越NoSQL的代表MongoDBCassandra。它就是HyperDex, 看一下官方给出的性能测试结果:

 

左边是系统吞吐量的对比,右边是系统响应时间的对比。这么牛的系统一定要看一下:

  • 最大的特点是不只可以根据主键搜索, 还可以根据其它字段搜索, 而且效率很高。
  • 它的奥妙在于它的数据分布方式: Hyperspace Hashing
    • 把每个属性作为一个维度,构造一个N维空间
    • 每个记录的每个字段通过hash,计算出一个值,映射到这个N维空间里面去
    • 使用的不是普通的hash,而是保持数据之间顺序的hash, 因此可以做遍历(scan)。
  • 对于那些有很多字段的表,按照这种设计,这个hyperspace会很大,但是机器数目就那么多。最后导致的问题就是,对于一般的查询,都要去很多server node去查询。HyperDex的解决办法是建立多个子的hyperspace而不是一个大的Hyperspace, 这样可以很好的解决这个问题.
  • HyperDex的为了使得search的效率更高,在多个subspace里面存了一条数据的多个副本,因此空间效率应该不会太高。
  • 通过value dependent chain来解决一致性问题,以及replication.
    • 对于每条数据,由于有多个subspace, 有多个node上有同一条记录, 所以会出现concurrent updates的问题: update1更新replica1, 而同时update2在更新replica2, 顺序混乱最后会导致数据不一致。
    • HyperDex通过在每个请求里面加上版本号信息来解决,比如有两个请求upadte1, update2, update1先过来的,它的版本号是1,那么HyperDex直接执行这个请求,而对于update2, 如果先到达某个node, 但是因为它的version是2, 所以要等1执行之后才会执行它。
    • 如果同时一个update,一个delete过来,事情会变得更加复杂,HyperDex的做法是避免这种情况,当HyperDex发现delete的时候,有人在update, 那么它等update做完之后再做。
  • HyperDex的replication对于用户来说是同步的 — 用户需要等replication结束,调用才能返回。
  • HyperDex不是schema free的
  • 新增机器怎么弄?
作者: xumingming | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明
网址: http://xumingming.sinaapp.com/785/hyperdex-notes/


posted on 2012-03-14 10:04  bigshuai  阅读(900)  评论(0)    收藏  举报