Skip to content

zhicheng/db

Folders and files

NameName
Last commit message
Last commit date

Latest commit

723bb02 · Jan 15, 2015

History

41 Commits
Jan 15, 2015
Jan 15, 2015
Jan 13, 2015
Jan 15, 2015
Oct 12, 2014
Oct 24, 2014
Jan 13, 2015
Oct 24, 2014
Nov 6, 2014
Jan 15, 2015
Oct 24, 2014
Jan 15, 2015
Oct 24, 2014
Oct 26, 2014
Oct 24, 2014
Oct 12, 2014
Oct 12, 2014

Repository files navigation

A New DBM in Pure C


Demo:
=====
db_t db;
db_option_t option;

option.table  = 256;	/* table number,keep this small if data not too much */
option.bucket = 256;    /* initialize bucket number in per table,will incrase when key add */
option.rdonly = 0;
if (db_open(&db, /* data file */ "foo.db", /* index file */ "foo.db", &option) != DB_OK) {
        fprintf(stderr, "open db failed\n");
        return 0;
}

if (db_put(&db, "hi", strlen(...), "hello,world", strlen(...)) != DB_OK) {
        fprintf(stderr, "NOT OK\n");
}

if ((len = db_get(&db, "hi", strlen(...), val, sizeof(val))) == 0) {
        fprintf(stderr, "NOT FOUND\n");
}

db_close(&db);


Limited:
========

In 32 bit platform database file size is limited 4GiB*

Key/Value length is 32 bit unsigned int

*Depends Your Operation System,Mostly can't get 4GiB map


Design:
=======

                +----------+
                |          |
                |  header  |
                |          |
                +----------+
                | table[0] |---------+
                +----------+         |
                | table[1] |------------+
                +----------+         |  |
                | table[2] |         |  |
                +----------+         |  |
                |    .     |         |  |
                |    .     |         |  |
                |    .     |         |  |
                +----------+         |  |
                | table[N] |         |  |
                +----------+         |  |
          +-----| bucket[0]|<--------|  |
          |     +----------+            |
          |     | bucket[1]|            |
          |     +----------+            |
       +--------| bucket[2]|            |
       |  |     +----------+            |
       |  |     |    .     |            |
       |  |     |    .     |<-----------+
       |  |     |    .     |
       |  |     +----------+
       |  |     | bucket[N]|
       |  |     +----------+
       |  +---->|   klen   |
       |        +----------+
       |        |   vlen   |
       |        +----------+
       |        |    .     |
       |        |   klen   |
       |        |  bytes   |
       |        |    .     |
       |        +----------+
       |        |    .     |
       |        |   vlen   |
       |        |  bytes   |
       |        |    .     |
       |        +----------+
       +------->|   klen   |
                +----------+
                |   vlen   |
                +----------+
                |    .     |
                |   klen   |
                |  bytes   |
                |    .     |
                +----------+
                |    .     |
                |   vlen   |
                |  bytes   |
                |    .     |
                +----------+
                |    .     |
                |    .     |
                |    .     |
                +----------+


Goal:
=====

Keep it simple, stupid

Next Release will has Dynamic Hash Implementation*
And Mmap Maybe not required.

*Litwin, Witold (1980), "Linear hashing: A new tool for file and table addressing"


FAQ:
====

Q: Do you use `mmap'? What if I don't want use `mmap'?
A: Yes.Just use others,there is a lot of key/value database you can choose.

Q: I tried this library,It's waste to much disk space and memory!
A: I'll write compaction function later,will reduce disk space in high update application,you can use db-export and db-import to a new database file.The future compaction function will do same thing.Memory is control by the kernel,Sorry.

Q: Compression?
A: Maybe.

Q: Encryption?
A: Maybe.

Q: I use this in my Web Server,I have a problem!
A: Please contact the author.

Q: I use this in my Mobile Phone,I have a problem!
A: Please contact the author.

Q: I want do X,Will be OK?
A: Just try.If don't,Please contact the author.

Q: I have a problem!
A: Please contact the author.


License:
========

Public Domain License

Releases

No releases published

Packages

No packages published