1

假设我有一本包含成对比较的字典:

 dict_of_dict = {"apple":{"apple":1, "orange":.5, "banana":.7}, "orange":{"orange":1, "apple": .3, "banana":.8}, "banana":{"banana":1, "apple":.7, "orange":.8}}

每个嵌入式字典可以包含约 20 万个条目。

在 MySQL 中存储它的一种(可怕的)方法是创建两个表fruitfruit 映射,其中fruit存储每个水果的id,而fruit 映射存储每个成对的分数。

fruit是一个带有 id 和 fruit 的两列表:

 fruit_id fruit
 0        apple
 1        orange
 2        banana

水果映射将水果的 id映射到每个成对比较的分数。

    fruit_id_A   fruit_id_B    score

       0               0         1        
       0               1        .5
       0               2        .7

...对于fruit_ids 1 和2 以此类推。在处理约200k 个条目时,您会看到明显的问题。在实际应用中,我们不会有 ~200k**2 行,因为只比较了水果的一个子集,但即使假设 50,000 个水果获得的分数也会给我们 10,000,000,000 行。有人有更好的方法吗?

4

1 回答 1

2

将其存储在 MySQL 中的一种(可怕的)方法是创建两个表 fruit 和 fruit 映射,其中 fruit 存储每个水果的 id,而fruit 映射存储每个成对的分数。

这不是一个糟糕的方法,而是关系数据库的明智方法。

当且仅当您的一组水果永远不会改变时,您可以只使用一个表格,识别水果和一个包含所有分数的浮点数组。但是您需要知道数组的哪个索引映射到哪个其他水果。

我会选择明显的关系方法。拥有 200M 行有什么不好,如果你索引你需要访问的列,也不会有性能问题。

于 2013-01-22T19:51:39.387 回答