Ответ 1
Я не думаю, что вы должны использовать управление версиями для хранения временных рядов. Не потому, что это не сработает, а потому, что оно не предназначено для конкретного случая использования, и есть другие способы.
Я предлагаю вам хранить временные ряды в качестве временного шага в качестве определителя столбца, а значением будут сами данные. Что-то вроде:
{
"row1" : {
"columnFamily1" : {
"col1-000001" : "1"
"col1-000002" : "2"
"col1-000003" : "91"
"col2-000001" : "31"
}
}
}
}
Хорошо, что HBase хранит классификаторы столбцов в отсортированном порядке, поэтому при чтении временного ряда вы должны увидеть элементы в порядке.
Другим реалистичным вариантом было бы иметь идентификатор для записи в качестве первой части строки, но затем также иметь временный шаг в строке. Что-то вроде:
{
"fooseries-00001" : {
"columnFamily1" : {
"val" : "1"
}
}
}
"fooseries-00002" : {
"columnFamily1" : {
"val" : "2"
}
}
}
}
У этой приятной функции довольно легко сделать сканирование диапазонов в определенной серии. Например, вытаскивание шагов от fooseries с 104 по 199 будет довольно тривиально для реализации и быть эффективным.
Недостатком этого является удаление целой серии, которая потребует немного большего управления и синхронизации. Еще один недостаток заключается в том, что аналитика MapReduce будет нелегко делать какие-либо анализы по этим данным. При таком подходе весь временной ряд будет передан одному вызову map()
, а здесь для каждого кадра будет вызываться map()
.