Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

5.5 SortedSets

Redis SortedSets are Sets that are ordered by an explicit "score". The ordering does not take into account ordering such as lexicographical or hashing functionality but instead uses the score for sorting. Members of the SortedSet are unique but scores are not, therefore sorted sets are member to score mappings in GemFireGeode.

Supported SortedSets commands: ZADD, ZCARD, ZCOUNT, ZINCRBY, ZLEXCOUNT, ZRANGE, ZRANGEBYLEX, ZRANGEBYSCORE, ZRANK, ZREM, ZREMRANGEBYLEX, ZREMRANGEBYRANK, ZREMRANGEBYSCORE, ZREVRANGE, ZREVRANGEBYSCORE, ZREVRANK, ZSCAN, ZSCORE

...

5.6 HyperLogLogs

Redis HyperLogLog's are C implementations of the data structure, whereas this implementation is done in Java within GemFireGeode. The only difference is that GemFire Geode implementation does not utilize the sparse implementation for small cardinalities but is otherwise the same.

Supported HyperLogLog commands: PFADD, PFCOUNT, PFMERGE

...

The GemFire Redis Server will also implement other commands to be a full fledged Redis server. However it is worth noting that while Redis has 160+ commands in their protocol, the GemFire Redis Server GemFireRedisServer will support roughly 40 110 of them. These will cover all basic commands as well and other practical ones that should not be left out. Commands such as the bitwise operations for Strings, HyperLogLogs, server side scripting, subscriptions and transactions are not supported. However because the Redis protocol generally look like [command] [key] [other args] there exist key commands that are data type independent and some of these will also be implemented. Redis has many commands for server configurations that are set up differently for Geode as well as scripting that isn't supported.

Another important note about keys is that key support within GemFireRedisServer is not the same as Redis. While all values are binary safe, most keys are not as they will have their own Regions in Geode. The Region namespace is defined by Java Strings, and Geode's OQL engine does not support all characters. Therefore some keys may cause failures with Geode if attempting to create a key using non printable characters such as UTF-8 0x01, 0x02, etc.

Supported Key commands: DEL, DBSIZE, EXISTS, EXPIRE, EXPIREAT, FLUSHALL, FLUSHDB, KEYS, PERSIST, PEXPIRE, PEXPIREAT, PTTL, SCAN, TTL

...

We have leveraged the highly concurrent nature of GemFire Geode to make GemFireRedisServer concurrent. Each server instance will start 4 * (number of processor cores) threads for processing client requests,  but this can be configured by system property where either one thread per connection can be created or a specific number of client handler threads can be requested.
6.2 Scalability
In Redis, a single data structure cannot scale beyond the memory available on a single box. From: http://redis.io/topics/partitioning

...

Slaves can be used for scaling read operations.
In GemFireGeode, you can have upto 3 redundant copies (for partitioned regions). When persistent, these replicas will first recover from local disk and only get the delta from the primary.  These copies can be used for read operations. 

...

Redis supports Snapshots as well as AOF (Append Only) persistence. AOF is a log of all the operations, which needs to be rebuilt on re-starts. AOF is automatically re-written when it gets too large.
GemFire Geode persistence is also append only, however keys and values are kept in separate files on disk. On restarts, only the key's file needs to be read.

...

Redis uses Sentinel for managing HA. User starts a number of sentinel processes by providing them a list of all the masters (the slaves are automatically detected). When a primary crashes, the sentinels gossip and elect a new primary from among the slaves.
In GemFireGeode, all members are connected to all other members, failover is automatic. (no need to provide a list of all members, which is error prone)

...

With the sentinel approach, there is no real protection from network partition. The documentation mentions that write quorum should be used to guard against writing to a primary on the loosing side, however, since the replication is asynchronous, there will still be some amount of data loss. (This will be fixed with redis-cluster, no more need of sentinels for partition detection)
GemFire Geode has network partition detection built in. The loosing side servers will shutdown/fence themselves, so that clients cannot connect to them.

...

7. Performance and Scalability
THESE NUMBERS ARE OLD AND WILL BE UPDATED
Geode GemFire - Redis Put Latency, 1 GemFire Geode vm, all replicate regions against 1 Redis server

 

 30 seconds run 60 seconds run
 Set 30s test

GemFire Geode puts: 406703

Redis puts: 555040

GemFire Geode puts per second: 13556.74

Redis puts per second: 18501.31

Ratio Redis puts / GemFire Geode puts: 1.36

 Set 60s test

GemFire Geode puts: 803180

Redis puts: 1024114

GemFire Geode puts per second: 13386.33

Redis puts per second: 17068.56

Ratio Redis puts / GemFire Geode puts: 1.28

 SAdd 30s test

GemFire Geode puts: 393580

Redis puts: 555410

GemFire Geode puts per second: 13118.69

Redis puts per second: 18513.63

Ratio Redis puts / GemFire Geode puts: 1.41

 SAdd 60s test

GemFire Geode puts: 788402

Redis puts: 1071641

GemFire Geode puts per second: 13140.02

Redis puts per second: 17860.67

Ratio Redis puts / GemFire Geode puts: 1.36

 ZAdd 30s test

GemFire Geode puts: 307861

Redis puts: 452107

GemFire Geode puts per second: 10262.00

Redis puts per second: 15070.22

Ratio Redis puts / GemFire Geode puts: 1.47

 ZAdd 60s test

GemFire Geode puts: 614861

Redis puts: 818554

GemFire Geode puts per second: 10247.67

Redis puts per second: 13642.55

Ratio Redis puts / GemFire Geode puts: 1.33

 LPush 30s test

GemFire Geode puts: 368547

Redis puts: 578384

GemFire Geode puts per second: 12284.88

Redis puts per second: 19279.45

Ratio Redis puts / GemFire Geode puts: 1.57

 LPush 60s test

GemFire Geode puts: 721365

Redis puts: 1106247

GemFire Geode puts per second: 12022.73

Redis puts per second: 18437.44

Ratio Redis puts / GemFire Geode puts: 1.53

 HSet 30s test

GemFire Geode puts: 391671

Redis puts: 556458

GemFire Geode puts per second: 13055.69

Redis puts per second: 18548.58

Ratio Redis puts / GemFire Geode puts: 1.42

 HSet 60s test

GemFire Geode puts: 783998

Redis puts: 1042350

GemFire Geode puts per second: 13066.63

Redis puts per second: 17372.49

Ratio Redis puts / GemFire Geode puts: 1.33

 


Scalability is not within the framework of this specification as GemFire Geode handles the scaling independently of this implementation.

...

9. Documentation
TBD

Updated 0607/1708/20142015