views:

47

answers:

0

Hi everybody,

I have thought a bit about sharding tables, since partitioning cannot be done with foreign keys in a mySQL table. Maybe there's an option to switch to a different relational database that features both, but I don't see that as an option right now.

So, the sharding idea seems like a pretty decent thing. But, what's a good approach to do this on a application level?

I am guessing that a take-off point would be to prefix tables with a max value for the primary key in each table. Something like products_4000000 , products_8000000 and products_12000000. Then the application would have to check with a simple if-statement the size of the id (PK) that will be requested is smaller then four, eight or twelve million before doing any actual database calls.

So, is this a step in the right direction or are we doing something really stupid?

Update:
Consistent hashing might also be an idea to share rows between multiple tables based on a primary key or similar. Another option might be to introduce the sharding at database level. I do not know enough about triggers/views or whatever is used to make this happen.