算法难题请教:如何计算分布式存贮的Key? 谢谢!!!
有这样一个需求:
水平切分(横向)数据是把所有数据当作一个大产品,但是把所有的平面数据按照某些Key(比如用户名)分散在不同数据库或者数据库服务器上,分散对数据访问的压力。
如何实现这个KEY呢?
例如:
一、5个用户名:
user1
user2
user3
user4
user5
二、有两台数据库服务器:
db1
db2
算法要求:如何把上面的5个用户名(实际应用上可能是无限的)映射到这两台服务器上呢?用什么算法可以做到呢?
基本条件:
1、用户名可能是无限的;
2、数据库服务器的数量在某个阶段是确定数量的,但可能会增加,增加时要求不破坏过去的KEY;
------解决方案--------------------------------------------------------
如果以前的KEY可以映射到任意用户名,那么新增的KEY怎么可能做到不映射以前的用户名呢?理论上新增的KEY映射只是以前的KEY的子集.
当然实际上是存在这样的新增KEY的,那是因为以前的实际数据并非用户名的全集.但是这个新增KEY没有通用的方法推导出来吧?
不破坏过去的KEY,好像只能阶段性的限制用户名的规则;或者人为的修改真实用户名(如添加前缀),这样如何不缓存用户信息的话定位用户比较麻烦,需要把数据库服务器全部扫一遍.