Ответ 1
Как должен быть сконструирован ключ строки так, чтобы строка с ключом ~ 10 была последней?
Вы видите результат сканирования таким образом, потому что rowkeys в HBase сортируются лексикографически, независимо от порядка вставки. Это означает, что они сортируются на основе их строковых представлений. Помните, что rowkeys в HBase рассматриваются как массив байтов, имеющих строковое представление. Строка row самого низкого порядка появляется сначала в таблице. Вот почему 10 появляется до 2 и так далее. См. Разделы Строки на этой странице , чтобы узнать больше об этом.
Когда вы оставили пэд, целые числа с нулями, их естественное упорядочение остается неизменным при сортировке лексикографически и поэтому вы видите порядок сканирования, такой же, как и порядок, в который вы вставили данные. Для этого вы можете создавать свои строковые ключи, как было предложено @shutty.
Я ищу некоторые рекомендуемые способы или способы, которые более популярны для разработки ключей строки HBase.
Для разработки хорошего дизайна есть несколько общих рекомендаций:
- Держите клавишу row как можно меньше.
- Избегайте использования монотонно увеличивающихся строк, таких как временная метка и т.д. Это плохой дизайн для shecma и приводит к горячей точке RegionServer. Если вы не можете избежать такого использования, как хеширование или соление, чтобы избежать горячих точек.
- Избегайте использования строк в качестве строк, если это возможно. Строковое представление числа принимает больше байтов по сравнению с его целым или длинным представлением. Например: Длинные 8 байт. Вы можете сохранить беззнаковое число до 18 446 744 073 709 551 615 в этих восьми байтах. Если вы сохранили это число как String - предположив байт на символ, вам нужно почти 3x байта.
- Используйте некоторый механизм, например хэширование, чтобы получить равномерное распределение строк, если ваши регионы не равномерно загружены. Вы могли бы также создать предварительно разделенные таблицы для достижения этого.
См. ссылку для получения дополнительной информации о дизайне rowkey.
НТН