在Cassandra 2+中存储简单的键值对

时间:2014-12-16 14:15:11

标签: java cassandra datastax-java-driver

目前我们正在使用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)?我想避免事先定义列名。

1 个答案:

答案 0 :(得分:1)

Cassandra肯定偏离了存储数据的节俭模型,但你仍然可以在cql中获得类似的分区布局:

partition blob, key blob , value blob, PRIMARY KEY partition,key

key blob, value blob, PRIMARY KEY key

取决于您是否希望在分区中拥有多个密钥。

Thrift仍然可用,但目前绝对是一脚出门。