- For individual users
- Instant access to solutions
- Ask your tech questions
- Start your 30-day Free Trial
Main Topics
Browse All TopicsIf you choose to use Hash tables with Berkeley DB, are keys actually stored in the hash table, or does the hash table store only hashes of keys, along with the actual record?
This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.
Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.
If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.
Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.
Access the answers to your technology questions today.
30-day free trial. Register in 60 seconds.
Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Try it out and discover for yourself.
30-day free trial. Register in 60 seconds.
Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.
Business Accounts
Answer for Membership
by: fridomPosted on 2007-11-04 at 23:49:31ID: 20214423
One can not reconstruct the original value from a hash code, one-to-one,
---------- + ---------- + ---------- ---------- ---------- --------+ ---------- ---------- ---------- --------+
nology/doc umentation /berkeley- db/ db/ref/ am/curget. html
and two entries can have the same hash code. So if one just would store the hash, the original key would be lost. So with all likliness they do store the original data also.
If one looks throught the sources, on can read in hash_page.c:
/*
* Figure out how many bytes we need on the new
* page to store the key/data pair.
*/
and in db_page.h
/*
* The first and second types are H_KEYDATA and H_DUPLICATE, represented
* by the HKEYDATA structure:
*
* +-------------------------
* | type | key/data ... |
* +-------------------------
*
* For duplicates, the data field encodes duplicate elements in the data
* field:
*
* +-------------------------
* | type | len1 | element1 | len1 | len2 | element2 | len2 |
* +-------------------------
*
* Thus, by keeping track of the offset in the element, we can do both
* backward and forward traversal.
*/
and if you look through the docs you can find an example:
http://www.oracle.com/tech
and there they write:
/* Initialize the key/data return pair. */ memset(&key, 0, sizeof(key)); memset(&data, 0, sizeof(data));
/* Walk through the database and print out the key/data pairs. */ while ((ret = dbcp->c_get(dbcp, &key, &data, DB_NEXT)) == 0) printf("%.*s : %.*s\n", (int)key.size, (char *)key.data, (int)data.size, (char *)data.data); if (ret != DB_NOTFOUND) { dbp->err(dbp, ret, "DBcursor->get"); goto err;
I bets this is not a hash code but the original string. If I'm not totally mistaken. Then the key is storeds as-is in the DB also.
Regards
Friedrich