Беркли Д.Б .: Как получить конкретный ключ от QUEUE - PullRequest
1 голос
/ 23 февраля 2012

Я записываю некоторые записи фиксированной длины в QUEUE в Беркли БД и получаю обратно номер записи после каждого PUT. Так, например, если я помещаю 4 сообщения в очередь, я получаю обратно 1, 2, 3, 4.

НЕТ. Я хотел бы получить сообщение из очереди, основываясь на его КЛЮЧЕ ...

Так что, если я попытаюсь:

db_recno_t keyval;   
DBT key, data; 

memset(&key, 0, sizeof(DBT)); 
memset(&data, 0, sizeof(DBT)); 

keyval = 2;
key.data =  &keyval; 
key.ulen = sizeof(keyval);
ret = q->get(q, NULL, &key, &data, DB_CONSUME);
printf("Key peek = %i\n", keyval);
printf("Data peek = %s\n", data.data);

Я продолжаю получать первую запись в очереди, а не ту, которую я указываю с помощью ключа (в данном случае «2»)

Я знаю, что ключи находятся в очереди 1,2,3,4, поэтому мне интересно, какую глупость я здесь делаю?

Спасибо за помощь, очень признателен; -)

Линтон

1 Ответ

0 голосов
/ 21 октября 2016

Попробуйте использовать другой формат базы данных, чем DB_QUEUE, если вам нужен произвольный доступ.

...