We are looking for the simplest implementation. Not the best. Fixed delimeter, string only, SIMPLE.
We as a team have a habit of always solving the bigger problem. Lets allow this one to be simple. -- Mike Stolz Principal Engineer - Gemfire Product Manager Mobile: 631-835-4771 On Jun 2, 2017 10:16 PM, "Jacob Barrett" <jbarr...@pivotal.io> wrote: > If you implement as regular expression the user doesn't have to reformat > their key to a specific format (akin to making them implement a class). I > would concat the matching groups for generate the routing key. > > Consider RegEx: .*\bcorrelation=(\d+).*\bmaybe-something-else=(\w) > With Keys: > A: my,key;with:any-chars;unique=12345;correlation=678/and, > maybe-something-else=a > B: my,key;unique=876324;correlation=678;and,maybe-something-else=a,foo > C: somthing;different=988975;correlation=678;then,maybe-something-else=ba > > Keys A and B would have routing key '678a'. Key C would have routing key > '678b'. > > -Jake > > > > Consider > > On Fri, Jun 2, 2017 at 4:02 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. > > >