最近一个NoSQL数据库很火,它高度一致, 高度可搜索, 非常快。几乎全面超越NoSQL的代表MongoDB
和Cassandra
。它就是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/
网址: http://xumingming.sinaapp.com/785/hyperdex-notes/