Один из подходов - сделать составные ключи строк из вашего идентификатора пользователя + siteid
Настройте таблицу так, чтобы поддерживать столько записей журнала, сколько вы хотите для данной страницы, и каждый раз сохранять данные как новые версии (при необходимости вручную устанавливая отметку времени).
Поскольку HBase поддерживает временные метки для каждой ячейки, вам не нужен отдельный столбец для времени доступа.
Таким образом, у вас будет таблица с содержимым, похожим на
Row Page
user1:site1 www.example.com/index.html@1234567890
www.example.com/somepage.html@123456800
www.example.com/someotherpage.html@123456900
www.example.com/index.html@123457123
user1:site2 blahblah
user2:site1 etc...
Чтобы обработать ваши два примера запросов:
Для поиска всех пользовательских строк вы должны выполнить сканирование (не забудьте установить maxVersion) от userx: 0 до userx + 1: 0, а затем проанализировать идентификаторы сайтов из каждой строки результатов
Чтобы получить все страницы для определенного пользователя / сайта, просто выполните сканирование от userx: sitex до userx: sitex + 1. В последний раз я проверял, что нельзя установить maxVersions для get, так что это не вариант.
Проще говоря, семейства столбцов представляют группы данных, которые вы хотите хранить вместе ...
Предположительно, вы будете читать данные с них одновременно довольно часто. Размещение столбцов в отдельных семействах приведет к тому, что данные будут храниться отдельно, поэтому вы будете быстрее читать, когда вам нужен только один столбец, но вам нужно прочитать 2 разных места, чтобы получить оба столбца.
Конечно, в зависимости от ваших других потребностей, вы можете выбрать другой подход. Я настоятельно рекомендую прочитать документ с большим столом, чтобы лучше понять структуру HBase (поскольку он сильно основан на bigtable).
Чтобы лучше понять внутренности HBase, Блог Ларса Джорджа также великолепен.