目前我们正在使用HBase来存储我们的数据。因此,我们创建了一个包含Map的抽象类,然后通过Java API存储此映射。
是一个样本类class User extends AHBase {
public static String columnName = "nam".getBytes();
//...
public void setName(String name) {
values.put(columnName, name.getBytes());
}
public String getName() {
return new String(values.get(columnName));
}
public byte[] getColumnFamily() {...}
public byte[] getTable() {...}
}
和商店一样简单(简化)
public void store(AHbase a) {
List<Put> puts = new ArrayList<>();
for (Entry<byte[], byte[] item : a.getValues().entrySet()) {
Put p = new Put(a.getColumnFamily, item.getKey(), item.getValue());
puts.add(p);
}
//...
}
我们现在正在评估Cassandra,因为它据说也是一个键值存储,它应该很容易切换并做一些基本的评估(至少我们这么认为)。
但是现在查看最新版本的Cassandra(2.1.2)时,它并不是我们所期望的。
是否仍有一种简单的方法来存储具有基本put操作或类似操作的键值对(对于ColumnFamily)?我想避免事先定义列名。
答案 0 :(得分:1)
Cassandra肯定偏离了存储数据的节俭模型,但你仍然可以在cql中获得类似的分区布局:
partition blob, key blob , value blob, PRIMARY KEY partition,key
或
key blob, value blob, PRIMARY KEY key
取决于您是否希望在分区中拥有多个密钥。
Thrift仍然可用,但目前绝对是一脚出门。