Сам вопрос можно найти наверное в последнем абзаце этого сумбурного поста.
Как в системах, моделирующих BigTable данные лежат на диске? Что с чем лежит ближе?
Например имеем табличку:
a:a a:b zz:a zz:b
"com.cnn.news" zuzuzu sobaka foo -
"ru.mail" - - - murmur
"ru.mail.foto" - - - bububu
Тут у нас 2 column family: a, zz. Прочерк - данных нет.
Ну и допустим каждая ячейка имеет случайное число версий, которые тоже как-то надо хранить.
Сканировать все строки какого-то столбца в BigTable — это так же быстро, как в column-oriented DB? Или одна column family может рассматриваться как таблица, похожая на InnoDB где ряд колонок пакуется в одну запись и строки лежат целиком друг за другом?
В гугловой бумаге https://static.googleusercontent.com/media/research.google.com/en//archive/bi... написано, что одна column family держит свои данные отдельно от других column family. Значит ли это, что я могу создать column family из 1 колонки и получить таким образом column-oriented СУБД поведение с точки зрени хранения? У меня эта колонка будет лежать на диске отдельно, храня данные всех своих ячеек последовательно друг за другом и обеспечивая быстрый скан по этой колонке?
Но там ещё есть версии (timestamp) на каждую ячейку. Где это timestamp хранится и как? При сохранении колонки, сохраняются последовательно все её версии? Т.е. если мы сканируем колонку, то если в какой-то из них было 1000 значений, то мы «запнёмся» об это, т.е. пока не проскипаем 999 версий, не получим нашу?
Короче, я так понял BigTable-подобные решения (типа HBase) строят на чём-то типа LevelDB — это тупо key=value LSM хранилка. Неважно, что она LSM, важно что key=value. Правильно я понимаю, что BigTable в самом низком уровне имеет просто key=value систему? Так вот, мой вопрос и касается того, какие именно ключи будут лежать в системе для моей вышеприведённой таблички. Если можно ткните в конкретный сырец, который реализует интерфейс между «row» -> «column» -> timestamp и ключом. Я предположу, что ключ для key=value вычисляется так:
(псевдо PHP-код)
$key = $row_key + $column_family + ":" + $column_key + $timestamp;