我无法访问某些数据。我使用YCSB与许多不同的数据库交谈,例如Cassandra和MongoDB。
我唯一可以修改的类是我的“Workload”类,它正在进行一些插入和读取。我用来从数据库中读取的方法是在类中:
public void doRead(DB db)
{
String keyname = buildKeyName(keynum);
System.out.println(keyname);
HashSet<String> fields = null;
if (!readallfields)
{
// read a random field
String fieldname = "field" + fieldchooser.nextString();
fields = new HashSet<String>();
fields.add(fieldname);
}
db.read(table,keyname,fields,new HashMap<String,ByteIterator>());
}
我尝试修改代码,以便我可以读取hashmap的内容。我删除了db.read行并将其替换为
HashMap<String, ByteIterator> kv_hashmap = new HashMap<String, ByteIterator>();
db.read(table, keyname, fields, kv_hashmap);
然后尝试从kv_hashmap中读取:
System.out.println(kv_hashmap.get(fields));
但是 db.read只返回一个int。 DB是一个公共抽象类,我宁愿不修改它的目的是与各种数据库交谈:
这就是db.read调用的内容:
public abstract int read(String table, String key, Set<String> fields, HashMap<String,ByteIterator> result);
返回,引用javadoc:
成功为零,错误时为非零错误代码或“未找到”。
我需要读取kv_hashmap中的值。我不明白为什么我无法访问它的价值。
答案 0 :(得分:0)
我看了一下DB类的实现,javadoc还说:
@param result A HashMap of field/value pairs for the result
但是,我接着看了BasicDB
延伸DB
- 它的身体只是打印出传入的字段。
我建议你做的是打印传递给你的方法的实际具体类DB
,看看该类在read
方法中实际做了什么,如:
System.out.println(Test.class.getName());
然后看一下显示的任何类的read
方法 - 如果它没有填充result
HashMap(与BasicDB
实现一样)那么那里就没什么了阅读