+1 This is the easiest way to make colocation easy -- Mike Stolz Principal Engineer - Gemfire Product Manager Mobile: 631-835-4771
On Jun 2, 2017 6:55 PM, "Darrel Schneider" <dschnei...@pivotal.io> wrote: > Geode partitioned regions usually partition the data based on the key's > hashcode. > You can do your own partitioning by implementing the PartitionResolver > interface and configuring it on the partitioned region. > > In some use cases needing to deploy your class that implements > PartitionResolver can be problematic so we would like to find a way to > offer partitioning based on a portion of the key (instead of the default > which uses the entire key) that does not require you to implement your own > PartitionResolver and does not require you to deploy your own code to do > the custom partitioning. > > Another group of users that do not want to implement PartitionResolver are > non-java clients. So the solution is required to be usable by non-java > geode clients without needing to reimplement the client to support a new > feature. > > Another constraint on the solution is for it to be both easy to use and > easy to implement. > > The proposed solution is to provide a class named: > org.apache.geode.cache.StringPrefixPartitionResolver > This class will implement PartitionResolver and have a default constructor. > To use it you need to configure a partitioned region's PartitionResolver > using the already existing mechanism for this (api, gfsh, or xml). > The StringPrefixPartitionResolver will require all keys on its region to be > of type String. > It also requires that the string key contains at least one ':' character. > The substring of the key that precedes the first ':' is the prefix that > will be returned from "getRoutingObject". > > An example of doing this in gfsh is: > create region --name=r1 --type=PARTITION > --partition-resolver=org.apache.geode.cache.StringPrefixPartitionResolver > > Note that attempting to use a key that is not a String or does not contain > a ':' will throw an exception. This is to help developers realize they made > a mistake. > > Note that the delimiter is always a ':'. It would be easy to made the > delimiter configurable when using apis or xml but currently gfsh does not > provide a way to pass parameters to the --partition-resolver create region > option. > > The only public api change this proposal makes is the new > StringPrefixPartitionResolver class. >