在MySQL数据库中存储字典字典

时间:2013-01-22 18:59:11

标签: python mysql

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

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

每个嵌入式字典可以包含~200k条目。

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

fruit 是一个包含id和fruit的双列表:

 fruit_id fruit
 0        apple
 1        orange
 2        banana

水果映射将来自 fruit 的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行。有人有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

  

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

这不是一种可怕的方法,而是关系数据库的合理方法。

当且仅当你的水果组永远不会改变时,你只能使用一个表,识别水果和浮动数组,并保持所有分数。但是你需要知道数组的哪个索引映射到哪个其他水果。

我会选择明显的关系方法。拥有200M行的情况非常糟糕,如果您索引需要访问的列,也不会出现性能问题。