众所周知,一个数据库表partition后如果按照某一维度查询,需要跨多个库操作。例如:按orderID 做horizontal partition,需要查某userID的所有order时就要query多个库,一个库被删库跑路挂了的话操作就失败了。所以通常对数据库进行异构/denormalization避免跨多个库查询。那么上面这个例子如何设计异构机制?
你说的异构是什么意思?
异构相当于把冗余数据存到当前partition里。
另外除了异构,还有其他方法解决这个问题吗?
你自己也说了用denormalization,不就是存user的信息同时存他的orders (一个table中)。这样优化了读操作,写操作就得同步了。dynamodb自带这种机制,比如global secondary index。相当于又维护了用userid做partition key的cluster。
user有1000个order就把1000个orderID serialized存user table的一个column里?
其他方法呢?
NOSQL的解决方案一般就是 denormalization
你还需要什么fancy的解决方案吗?
或者你产生orderID的时候用userid做prefix
prefix似乎不错。。。
你如果是个全新系统的话可以这么搞