Я не думаю, что вы должны использовать управление версиями для хранения здесь временных рядов. Не потому, что он не будет работать, а потому, что он не предназначен для этого конкретного случая использования и есть другие способы.
Я предлагаю вам сохранить временной ряд в качестве временного шага в качестве квалификатора столбца, а значением будут сами данные. Что-то вроде:
{
"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"
}
}
}
}
Это имеет приятную особенность, заключающуюся в том, что будет довольно легко выполнять сканирование диапазона в определенной серии. Например, вытащить шаги 104–199 из фуража будет довольно тривиально для реализации и быть эффективным.
Недостатком этой процедуры является удаление всей серии, что потребует немного больше управления и синхронизации. Другим недостатком является то, что аналитикам MapReduce будет сложно проводить какой-либо анализ этих данных. При вышеупомянутом подходе весь временной ряд будет передан одному вызову map()
, тогда как здесь, map()
будет вызываться для каждого кадра.