EJDB - 类似MongoDB的嵌入式JSON数据库引擎

jopen 11年前

EJDB是一个可以嵌在C/C++应用中使用,类似于MongoDB的JSON数据库引擎。

EJDB是一个C库,基于Tokyo Cabinet的一个修复版。JSON的数据查询和展示,基于 C BSON实现。

特性:

  • 类似MongoDB的查询和整体理念。
  • 集合级写入锁定。
  • 集合 级别的事务
  • 字符串标记匹配查询。
  • Node.js 绑定。

#include <tcejdb/ejdb.h>    static EJDB *jb;    int main() {      jb = ejdbnew();      if (!ejdbopen(jb, "addressbook", JBOWRITER | JBOCREAT | JBOTRUNC)) {          return 1;      }      //Get or create collection 'contacts'      EJCOLL *coll = ejdbcreatecoll(jb, "contacts", NULL);        bson bsrec;      bson_oid_t oid;        //Insert one record:      //JSON: {'name' : 'Bruce', 'phone' : '333-222-333', 'age' : 58}      bson_init(&bsrec);      bson_append_string(&bsrec, "name", "Bruce");      bson_append_string(&bsrec, "phone", "333-222-333");      bson_append_int(&bsrec, "age", 58);      bson_finish(&bsrec);      //Save BSON      ejdbsavebson(coll, &bsrec, &oid);      fprintf(stderr, "\nSaved Bruce");      bson_destroy(&bsrec);        //Now execute query      //QUERY: {'name' : {'$begin' : 'Bru'}} //Name starts with 'Bru' string      bson bq1;      bson_init_as_query(&bq1);      bson_append_start_object(&bq1, "name");      bson_append_string(&bq1, "$begin", "Bru");      bson_append_finish_object(&bq1);      bson_finish(&bq1);        EJQ *q1 = ejdbcreatequery(jb, &bq1, NULL, 0, NULL);        uint32_t count;      TCLIST *res = ejdbqrysearch(coll, q1, &count, 0, NULL);      fprintf(stderr, "\n\nRecords found: %d\n", count);        //Now print the result set records      for (int i = 0; i < TCLISTNUM(res); ++i) {          void *bsdata = TCLISTVALPTR(res, i);          bson_print_raw(stderr, bsdata, 0);      }      fprintf(stderr, "\n");        //Dispose result set      tclistdel(res);        //Dispose query      ejdbquerydel(q1);      bson_destroy(&bq1);        //Close database      ejdbclose(jb);      ejdbdel(jb);      return 0;  }

项目主页:http://www.open-open.com/lib/view/home/1352788645293