假设我有一个包含成对比较的字典词典:
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行。有人有更好的方法吗?
答案 0 :(得分:2)
将这个存储在MySQL中的一种(可怕的)方法是创建两个表水果和水果映射,其中水果存储每个水果的ID,水果映射存储每个成对分数。
这不是一种可怕的方法,而是关系数据库的合理方法。
当且仅当你的水果组永远不会改变时,你只能使用一个表,识别水果和浮动数组,并保持所有分数。但是你需要知道数组的哪个索引映射到哪个其他水果。
我会选择明显的关系方法。拥有200M行的情况非常糟糕,如果您索引需要访问的列,也不会出现性能问题。