将Java对象映射到Cassandra数据存储的最佳方法是什么?
我刚开始学习Cassandra,并一直在使用Hector Java库,这似乎是目前最流行的 我试图找出如何最好地将数据存储公开给我的Java代码,并试图做一些类似于我在使用关系数据存储时熟悉的对象关系模型的事情 下面是一个表示用户的示例对象。是的,它是不可变的,我将分别处理这些对象的变异 注意,我创建了一个单独的类,名为Database,它封装了CassandraClientPool。execWithKeyspace方法接受Google Collections函数并向其传递Hector键空间。我这样做是因为它允许我保证CassandraClient在处理完后会返回到池中 尽管如此,我真的不确定我是否采取了最好的方法,并希望得到一些反馈:将Java对象映射到Cassandra数据存储的最佳方法是什么?,java,cassandra,Java,Cassandra,我刚开始学习Cassandra,并一直在使用Hector Java库,这似乎是目前最流行的 我试图找出如何最好地将数据存储公开给我的Java代码,并试图做一些类似于我在使用关系数据存储时熟悉的对象关系模型的事情 下面是一个表示用户的示例对象。是的,它是不可变的,我将分别处理这些对象的变异 注意,我创建了一个单独的类,名为Database,它封装了CassandraClientPool。execWithKeyspace方法接受Google Collections函数并向其传递Hector键空间。我
public class User {
static final List<byte[]> colnames = Lists.newArrayList("Email".getBytes(), "Password-Hash".getBytes(),
"Name".getBytes(), "Company-Name".getBytes());
public static User getUser(final long id, final Database db) {
return db.execWithKeyspace(new Function<Keyspace, User>() {
@Override
public User apply(final Keyspace keyspace) {
final SlicePredicate sp = new SlicePredicate();
sp.setColumn_names(colnames);
final ColumnParent cp = new ColumnParent("Users");
final KeyRange kr = new KeyRange();
kr.setCount(1);
kr.setStart_key(Long.toString(id));
final Map<String, List<Column>> rangeSlices = keyspace.getRangeSlices(cp, sp, kr);
if (rangeSlices.size() != 1)
return null;
final List<Column> cols = rangeSlices.get(Long.toString(id));
if (cols == null)
return null;
return new User(id, string(cols.get(0).value), string(cols.get(1).value), string(cols.get(2).value),
string(cols.get(3).value));
}
});
}
final long id;
public final String email;
public final String passwordHash;
public final String name;
public final String companyName;
}
你可能会发现这个问题是相关的:这解释了如何在Cassandra中表示对象,我对它的这一方面很满意。我更关心的是数据存储在我的Java代码中是如何公开和访问的。您是否有任何特别的顾虑,比如性能、清晰度、错误处理等?这个问题不是很具体。你可能会发现这个问题很相关:这解释了如何在Cassandra中表示对象,我对它的这一面很满意。我更关心的是数据存储在我的Java代码中是如何公开和访问的。您是否有任何特别的顾虑,比如性能、清晰度、错误处理等?这个问题不是很具体。