Могу ли я прочитать все версии одной клетки в Кассандре? - PullRequest
2 голосов
/ 03 января 2012

Я хочу получить все версии одной ячейки.Однако, похоже, что Cassandra API может получить только последнюю версию / метку времени.Например, использование hector:

import me.prettyprint.hector.api._
import me.prettyprint.hector.api.factory._
import me.prettyprint.cassandra.serializers._
import me.prettyprint.cassandra.service.template._
object GetExample extends App {
    val cluster = HFactory.getOrCreateCluster("test_cluster", "127.0.0.1:9160")
    val keyspace = HFactory.createKeyspace("test_keyspace", cluster)
    val colFamilyName = "test_table"

    val template = new ThriftColumnFamilyTemplate(keyspace, colFamilyName,
                                                  StringSerializer.get(),      
                                                  StringSerializer.get())
    val result = template.queryColumns("row1")
    System.out.println(result.getString("qual1"))
    System.out.println(result.getColumn("qual1").getClock())

    HFactory.shutdownCluster(cluster)
}

getClock() дает мне только самую последнюю временную метку.

Одна из причин, по которой я хочу использовать все временные метки, заключается в том, что в собственном API Cassandra удаление может назначать метку времени для удаления.значения старше, чем это.Итак, как мне узнать, какие временные метки использовать, если я не могу их получить?Кроме того, я могу использовать метку времени для хранения разных версий одной ячейки, что является весьма полезным механизмом моделирования.

Может ли Кассандра сделать это?

Я немного искал и обнаружил, как однажды сказал Джонатан Эллис: "Нет, мы не планируем добавлять поддержку для извлечения старых версий."Но это было в марте 2010 года. Это все еще правда?Если да, то почему?

Ответы [ 2 ]

3 голосов
/ 03 января 2012

Причина, по которой столбцы имеют временные метки, заключается в том, что Cassandra может обрабатывать разрешение конфликтов, когда несколько клиентов записывают в один и тот же столбец.

Если вы хотите сохранить несколько версий столбца, вы можете использовать составной столбец OriginalColumnName :: TimeUUID .Затем вы можете нарезать все столбцы по OriginalColumnName, чтобы получить исторические значения этого столбца.Вот пример с использованием столбца hector и составного столбца .

2 голосов
/ 03 января 2012

Боюсь, в нынешнем виде Кассандра не может этого сделать.

Версия Кассандры от Acunu (http://www.acunu.com/acunu-data-platform/) имеет возможность делать снимки и читать (старые) данные с них.снимок и полное дерево версий, где записи в разные версии полностью изолированы.

Примечание: я работаю для Acunu.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...