0

我有一个 mysql 数据库,其表具有以下属性:p1、p2、p3、c1、c2、c3,其中 p1、p2 和 p3 是主键。现在的问题是,我想以“节省时间”的方式将其映射到 Redis,如果可能的话,也要“节省空间”。是这样想的:

场景一:p1 -> HashMap (c1, c2, c3)
p2 -> p1
p3 -> p1

但在这里,我需要两个操作(66% 的概率)来获取所需的 c1、c2、c3 值。p1 占用的额外空间(两次)也是一个问题。

场景 2:p1:p2:p3 -> HashMap(c1, c2, c3)

但这里的问题是我无法在不知道所有主键的情况下获取哈希图。

简而言之,我的目标是以时间有效的方式获取 c1、c2 和 c3,使用 p1、p2 或 p3(不是全部一起)。

4

1 回答 1

0

采取第一种方法。确实,它会在内存方面花费更多,是的,在 66% 的情况下,您必须执行两次操作(假设要获取的 p1、p2、p3 值的均匀分布)但是另一种选择,就像您有指出,键名中包含所有 p。另一种方法虽然在技术上可行(例如,您可以从数据库中获取所有密钥 [当然使用 SCAN,而不是 KEYS] 并在应用程序中过滤它们以根据您拥有的 p 找到您需要的密钥),但更多在操作/性能方面昂贵。

换句话说,这是时空权衡的经典案例。

于 2014-09-01T12:01:33.187 回答