我有一个 mysql 数据库,其中一个表具有以下属性: p1、p2、p3、c1、c2、c3,其中 p1、p2 和 p3 是主键。现在的问题是,我想以一种“节省时间”的方式将其映射到 Redis,如果可能的话,还要“节省空间”。 是这样想的:
场景 1:
p1 -> HashMap (c1, c2, c3)
p2 -> p1
p3 -> p1
但在这里,我需要两次操作(66% 的概率)来获取所需的 c1、c2、c3 值。 p1(两次)占用的额外空间也是一个问题。
场景 2:
p1:p2:p3 -> HashMap(c1, c2, c3)
但这里的问题是我无法在不知道所有主键的情况下获取 HashMap 。
简而言之,我的目标是以时间有效的方式获取 c1、c2 和 c3,使用 p1、p2 或 p3 中的任何一个(不是一起)。
最佳答案
采用第一种方法。的确,它会在内存方面花费更多,是的,在 66% 的情况下你必须执行两个操作(假设要获取的 p1、p2、p3 值的均匀分布)但是替代方案,就像你有指出的是,键的名称中包含所有 p。替代方案虽然在技术上可行(例如,您可以从数据库中获取所有 key [当然使用 SCAN,而不是 KEYS] 并在应用程序中过滤它们以根据您拥有的 p 找到您需要的 key ),但要多得多在操作/性能方面昂贵。
换句话说,这是 Space-Time tradeoff 的经典案例.
关于mysql - 将 MySQL 中的主键映射到 Redis,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25599690/