Как получить первичный ключ (PK) записи в аэроспайке? - PullRequest
0 голосов
/ 09 октября 2018

Я хочу получить конкретную запись из набора в aerospike.

Но когда я выполняю следующий запрос, я не получаю результата:

select * from ctl.prodCache where PK='111222';

Но когда я выполняю следующееquery:

select * from ctl.prodCache;

Это дает мне все записи, но не показывает первичный ключ вообще.

{"edigest": "BE6ZxLRMKwnbmUqPTvsmcIAgVv8 =", "set": "prodCache", "ttl": 54, "gen": 1, "bin": {"C": "java.util.ArrayList", "V": "00 10 70 61 79 74 6D 6D 61 2E 646F 6D 61 69 6E 2E 43 "}}

Есть предложения?Пожалуйста, помогите.

Ответы [ 3 ]

0 голосов
/ 09 октября 2018

Это потому, что по умолчанию не хранится первичный ключ с записью.Запись идентифицируется кортежем (namespace, set, PK) и затем хэшируется клиентом через RIPEMD-160 в 20-байтовый дайджест.Этот дайджест является фактическим идентификатором записи.Именно так клиент находит идентификатор своего раздела, ищет, какие узлы имеют хозяина этого раздела, и переходит на этот узел с одним прыжком.

На этом узле дайджест сопоставляется первичному индексучтобы найти метаданные этой записи.Сканирование будет проходить по первичному индексу для определенного пространства имен, получать метаданные всех записей и передавать их обратно клиенту.Если вы выбрали для атрибута sendKey вашей политики записи значение true, ключ будет сохранен вместе с данными записи.Тогда вы можете получить к нему из сканирования / запроса.По умолчанию этого не происходит, потому что это может означать много места

0 голосов
/ 13 ноября 2018

Сначала выполните следующие команды из AQL:

SET KEY_SEND TRUE

, а затем вставьте данные в определенные наборы.

После этого выполните запрос выбора.

PK будет показан только для вставок, для которых вставки были сделаны, установив для KEY_SEND значение true.

0 голосов
/ 09 октября 2018

По умолчанию Aerospike не хранит ваш первичный ключ.Он хранит хэш RIPEMD160 вашего ключа + 1 байт для типа ключа + имя набора.Это то, что вы видите в base64 в выводе edigest.В AQL вы можете установить SEND_KEY в значение true, и тогда оно будет отображаться в метаданных о записи.В AQL выполните SET RECORD_PRINT_METADATA true и SET OUTPUT JSON для лучшей видимости.Теперь ваш запрос с PK = '111222' должен работать, если ваш ключ был строкой '111222', если это целое число, используйте PK = 111222, и это должно работать.

...