【发布时间】:2014-12-04 18:52:21
【问题描述】:
我想用SQL实现下面的HashMap
HashMap<key, ArrayList<posting>>
发布类定义为:
public class Posting {
public int documentId;
public double score;
public Posting(int docId, double scr){
documentId = docId;
score = scr;
}
}
然后我创建一个名为 hashMap 和列 (keyId,key) 的表。 keyId 是自增 ID。另外,每个key只在hashMap表中插入一次。
然后我创建一个带有名称发布的表。该表的列是(keyId、docId、score)。
你认为这是一种高效的(空间和时间)实现 hashmap 的方式吗?
我的第二个想法是创建一个名为 hashMap 和列(键,postingName)的表,键是主键。 postingName 是包含列(docId、score)的表的名称。 在第二个实现中,我将每个数组列表转换为一个表。
你觉得哪一个效率高?
有没有更好的方法来实现这个hashmap?
请注意,我的 hashmap 的大小非常大。我想存储大约 16.3G 的数据。我只想将我的 HashMap 存储到 Mysql 数据库,然后从数据库中检索数据到 HashMap。
我很欣赏你的想法。
【问题讨论】:
-
key的类型是什么?如果是整数,请勿使用单独的keyId。与直接使用key相比,开销是 200%。 -
@Dark Falcon 键的类型是字符串。
-
您需要它是关系型的吗?也就是说,您是否预计必须对您的数据库运行查询以回答诸如“某某 docId 的平均分数是多少?”、“有多少不同的文档与此键相关联?”之类的问题。等等。如果没有,您最好简单地序列化(和 gzip 压缩)列表,并将其存储为每个键的 blob,使用单个表,如 (key, blob)。如果您确实需要一个关系模式,那么您的设计似乎是合理的。
-
@DarkFalcon 文档的数量是 10000。我希望我可以拥有确实的信息,但请您解释一下您的解决方案。
标签: java mysql sql arraylist hashmap