1

我在访问某些数据时遇到了困难。我正在使用YCSB与许多不同的数据库进行通信,例如 Cassandra 和 MongoDB。

我可以真正修改的唯一类是我的“工作负载”类,它正在执行一些插入和读取。我用来从数据库中读取的方法在类中:

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>());
}

我试图修改代码,以便可以读取哈希图的内容。我删除了 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 中读取值。我不明白为什么我不能访问它的值。

4

1 回答 1

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显示的任何类的方法 - 如果它没有填充resultHashMap(与BasicDB实现一样),那么您将没有任何内容可供阅读

于 2013-02-25T16:05:47.387 回答