Разработка Hbase-схемы - упростить сортировку? - PullRequest
1 голос
/ 25 марта 2010

В моем словаре 1 миллион слов. Всякий раз, когда пользователь запускает запрос на моем веб-сайте, я проверяю, содержит ли этот запрос слова в моем словаре, и увеличиваю счетчик, соответствующий им по отдельности. Вот пример, скажем, если пользовательский тип в «Обама является президентом» и «Обама» и «президент» в моем словаре, то я должен увеличить счетчик на 1 для «Обама» и «президент».

И время от времени я хочу видеть лучшие 100 слов (наиболее запрашиваемые слова). Если я использую Hbase для хранения счетчика, какую схему мне использовать? - Я еще не подошел к эффективному.

Если я использую слово в своем словаре в качестве ключа строки и «счетчик» в качестве ключа столбца, то обновление счетчика (приращение) очень эффективно. Но очень сложно отсортировать и вернуть 100 лучших.

Кто-нибудь может дать хороший совет? Спасибо.

Ответы [ 3 ]

1 голос
/ 04 июня 2010

Вы можете использовать естественную схему (ключ строки в качестве слова и столбец в качестве счетчика) и использовать IHBase для получения вторичного индекса для столбца счетчика. См. https://issues.apache.org/jira/browse/HBASE-2037 для начальной реализации; текущий код живет в http://github.com/ykulbak/ihbase.

0 голосов
/ 12 сентября 2012

Из Презентация Adobe на HBaseCon 2012 (в частности, слайд 28), я предлагаю использовать две таблицы и такую ​​структуру данных для ключа строки:

имя

President => 1000
Test => 900

Количество

429461296:President => dummyvalue
429461396:Test => dummyvalue

Ключи строк второй таблицы получены с помощью Long.MAX_VALUE - счет в этот момент времени.

Когда вы получаете новые слова, просто добавьте "count: word" в качестве ключа строки в таблицу счетчиков. Таким образом, вы всегда получаете первые слова, которые возвращаются первыми при сканировании таблицы.

0 голосов
/ 14 июня 2010

Сортировка длинны 1М может быть сделана в памяти, и что?

Сохранение слов x, y, z, выпущенных в момент времени t, в качестве ключа: t cols: word: x = 1 word: y = 1 word: z = 1 в таблице. Затем используйте задание MapRed для суммирования количества слов и получения 100 лучших.

Это также позволяет проводить дальнейший анализ.

...