招贤纳士

2009年8月18日 发表评论 阅读评论

Berkeley DB is an open source database kernel that is developed in C, C++, and Java. It provides APIs for a variety of programming languages and environments.  Berkeley DB is very simple and lightweight, yet it is very flexible and provides sophisticated database functionalities such as indexing, caching, in-memory and on-disk operation, concurrent access, transactions and recovery, and replication for high availability.

We are the Berkeley DB global engineering team. We have colleagues in America, Britain, Australia and China (Shenzhen). We design, develop and enhance the Berkeley DB kernel. It is the industry-leading open source, embeddable database engine and has been used across various industries like mobile devices, telecom, security, storage, financial services, etc. More details at: http://otn.oracle.com/products/berkeley-db/index.html.

Do you want to join the Oracle Berkeley DB global engineering team? Are you interested in considering a career with Oracle Berkeley DB engineering group (Shenzhen)?

Responsibilities

- Develop new functionalities for Berkeley DB product set, including Berkeley DB, Berkeley DB Java Edition, and Berkeley DB XML.

- Design and implement features to integrate Berkeley DB products with popular IDEs and other open source products, such as Eclipse, Visual Studio, Apache, etc.

- Work on OS level portability for key strategic platforms, including Windows, Linux/Unix, and mobile platforms such as Windows Mobile, Google Android, Symbian and BREW.

- Streamline Berkeley DB product build, verification, and release testing process.

- Enhance existing Berkeley DB stress and performance testing.

- Develop and maintain Berkeley DB APIs for various programming languages and environments (e.g. PHP, Ruby, C#).

Requirements

- Master Degree in Computer Science or related fields.

- Minimum 3 years of experiences in system software development or equivalent education/experiences.

- Excellent knowledge of database internals, including buffer management, indexing, logging, recovery, concurrency control, etc.

- Strong programming skills in C, C++, Java and working knowledge of Tcl, Perl, XML, C#, PHP, Ruby, etc.

- Knowledge of embedded platforms, operating systems, porting processes and methodologies.

- Knowledge of testing and performance methodologies.

- Good communication skills.

- Proficient in written and spoken English.

- Intimate knowledge of Windows platform and mobile platforms such as Windows Mobile, Google Android, Symbian, and BREW is a strong plus.

  1. lsccsl
    2009年8月17日13:55 | #1

    我能加入吗?这是我的一份作品,基于b树的数据库

  2. lsccsl
    2009年8月17日13:56 | #2

    我能加入吗?这是我的一份作品,基于b树的数据库 http://sourceforge.net/project/stats/detail.php?group_id=202044&ugn=foolib&type=prdownload

  3. chaohuang
    2009年8月18日10:08 | #3

    @lsccsl
    你方便给我一份你的简历吗?chao.huang @ o.com (你应该知道的)。

  4. evanfly
    2009年10月5日10:10 | #4

    我现在正在看BDB方面的文档,准备用在我们自己正在开发的一个“相关新闻推荐”的小项目中。说实话,也是第一次接触BDB,但非常感兴趣,希望能有几乎加入BDB开发团队,我现在是北大研三,正在找工作,不知道校园招聘什么时候开始?或者是直接把我简历发给您?

  5. chaohuang
    2009年10月6日10:06 | #5

    @evanfly
    欢迎evanfly – 你可以把简历直接发到我邮箱(见上文)。Oracle校园招聘会在10月中下旬开始,BDB研发的工作地点在深圳。

  6. evanfly
    2009年10月8日16:00 | #6

    我在使用BDB建立倒排索引时发现,同一个key不能对应太多value(一个key对应上万个value),或者是支持大文件(建立之后的数据文件大概600M)时无法正常读取。BDB是目前是没有这方面支持吗?

  7. chaohuang
    2009年10月9日10:44 | #7

    @evanfly
    能具体点吗-你是怎么用的,什么设置?你用的是BDB-JE还是BDB?

  8. evanfly
    2009年10月9日14:56 | #8

    @chaohuang
    我们是用BDB, 具体描述我也不知道怎么说了, 反正现在是无法读取数据. 但是问了一些曾经使用过BDB的人, 他们跟我情况差不多, 也是一个key对应上万甚至十万个value, 总数据量上G了, 但是他们没问题. 所以我不知道是不是因为我们的一个key长度是char [256](因为我们是拿URL作为key建倒排索引), 而那个成功的是用int作为key…

  9. Emily Fu
    2009年10月9日17:57 | #9

    Hi,

    感谢你使用BDB!请问能否提供更详细的使用场景,例如访问机制,打开设置,缓冲设置,比较函数等等。

    针对你提到的几个问题,我有如下的建议:
    (1) 同一个key不能对应太多value
    在btree和hash的数据库打开时,设置其为DB_DUP或者DB_DUPSORT,均可支持单key多value,value的个数不受限制,可参考http://www.oracle.com/technology/documentation/berkeley-db/db/api_reference/C/dbset_flags.html。

    (2) 大文件无法正常读取
    请问你在何种情况下读取何种数据时,无法正常读取?你是否使用mpool子系统,是否设置适应你应用程序需要的cachesize。mpool子系统可在打开环境时设置其flag为DB_INIT_MPOOL,可参考http://www.oracle.com/technology/documentation/berkeley-db/db/api_reference/C/envopen.html。
    cachesize的设置需要根据应用程序的需要进行设置,http://www.oracle.com/technology/documentation/berkeley-db/db/api_reference/C/dbset_cachesize.html。

    (3) 字符串作为key无法正常读取
    请问你如何读取这些数据,根据key查找,还是用cursor等遍历的方法。BDB支持任何类型的key或者value。能否正常读取数据取决于应用程序是否用正确的方法读取key或者value。

    Emily

  10. evanfly
    2009年10月12日20:13 | #10

    @Emily Fu
    您这么详细的答复,太谢谢您了!

    现在项目虽然已经结束了(由于时间截止,所以当时还是没有解决这个问题),但我找时间跟我的队友们再好好研究一下~

    另外,我已经将我的中英文简历发送至chao.huang#oracle.com(我是2010应届毕业生,申请BDB开发工程师的职位)

  11. evanfly
    2009年10月12日20:27 | #11

    chaohuang :@evanfly欢迎evanfly – 你可以把简历直接发到我邮箱(见上文)。Oracle校园招聘会在10月中下旬开始,BDB研发的工作地点在深圳。

    Hi Chao
    我刚才已经把我的简历发给您了,英文名是Evan Chau, PDF格式附件就是我的中英文简历~

  12. chaohuang
    2009年10月13日11:29 | #12

    @evanfly
    是的,我收到您的简历,看上去很不错。请留意Oracle的校园招聘宣讲,期待能和你在北京面试中见面。

  13. ysys
    2009年10月23日16:13 | #13

    我在bdb上做了两年多的应用了,对源码也有一定的了解,能否加入?

  14. chaohuang
    2009年10月23日16:33 | #14

    @ysys
    当然可以。请问你是应届生还是有经验的人士?能否给我一份简历?

  15. ysys
    2009年10月27日09:40 | #15

    算是有经验的人士吧,你的邮箱是哪个? 下面两个好像都不对
    chao.huang @ o.com
    chao.huang@o.com

  16. chaohuang
    2009年10月27日11:31 | #16

    @ysys
    你可以参考上面evanfly的回复。注意:把#换成@。

    另外,在这个blog的人都知道oracle的邮箱后缀了吧?如果不知,我再重复一下,是oracle.com。举个例子,如果某个Oracle的员工,他的id是John Smith, 以此类推他的Email是John.Smith@oracle.com。

  17. xkun726
    2009年11月13日20:20 | #17

    chao.huang@oracle.com好像也不对吧,为什么我的是邮件会退回来

  18. 2009年11月16日11:09 | #18

    @xkun726
    一般来说,最好用域名为gmail.com, yahoo.com和live.com的邮箱地址来发送邮件。因为国内大部分的地址可能会被屏蔽.

  19. ysys
    2009年12月1日10:28 | #19

    xkun726,他的邮箱是chao.huang@oracle.com,你写的应该没错,这个是对的,因为他回过我的邮件。

    各位,大家好,我是在一名程序员,平时工作和BDB相关,对BDB有浓厚的兴趣,现建立一个QQ群,23280355,希望大家来加入,参与讨论,互相学习,共同进步。

  20. ysys
    2009年12月1日10:29 | #20

    管理员,你好,我只想建个群,让大家有地方谈论bdb,希望你能让我审核通过。谢谢!

  21. chaohuang
    2009年12月1日12:03 | #21

    @ysys
    好主意,谢谢ysys!我们组里好像用QQ的不多,所以QQ群里的问题你可以转给我。我的邮箱地址是chao.huang@oracle.com。为了阻止垃圾邮件,我们一般都写chao.huang @ o.com (o -> oracle),注意这里有意的空格。

  22. ysys
    2009年12月2日11:23 | #22

    大家对群23280355(我爱BDB)的关注度不够呀,呵呵。  继续打广告:我在群空间中共享了bdb_4.7.25版本的环境结构全图(和4.8版本只有很小的差别,无碍大局),绝对对你看源码了解博大精深的bdb有帮助,以后我会在大家需要的情况下公开环境建立,数据库建立,数据插入等的图形化说明。没有别的目的,只希望找到喜欢bdb的战友,国内好像没有bdb的论坛吧,有的话,大家告诉我一声。另外,这些图都是我自己做的,别的地方是找不到的,快点加入吧。

  23. xkun726
    2009年12月7日18:39 | #23

    请问下,有没有一个bdb论坛的..我这里有一些关于bdb的问题想问问…

  24. chaohuang
    2009年12月8日12:33 | #24

    @xkun726
    有。见本站右边栏 -> 常用链接 -> Berkeley DB官方论坛。

  25. xiaoxin
    2010年1月22日12:46 | #25

    您好,我使用的是Berkeley DB 4.8.24,但有一个问题,就是关于当次索引支持多key重复且有序(BD_DUPSORT)时,我设的比较函数总是调不到。请问这可能是什么原因?具体如下:
    以下程序是在visual stdio 2008上编译的,主要是一个主数据库与一个次数据库,其中次数据库支持重复(DB_DUPSORT),比较函数由自己设(不使用系统的)但在实际测试中不会调自己设的回调函数(secondary_compare)来进行次索引的比较,但是如果次索引的字段改成u_char(本程序中用的为u_long)则会调到,这是为什么呢?有没有人知道的?
    #include “db.h”
    #include
    typedef struct _testID
    {
    u_long PIndex;
    u_long stime;
    }TID;
    u_long tmp;
    //主索引比较函数
    int primary_compare( DB* db, const DBT *key1, const DBT *key2)
    {
    u_long a = ((TID*)(key1 ->data))->PIndex;
    u_long b = ((TID*)(key2 ->data))->PIndex;
    return (a – b);
    }
    // secondary compare function
    int secondary_compare( DB* db, const DBT *key1, const DBT *key2)
    {
    //在这个函数打上断点怎么老是执行不到?是不是前面我哪里设错了?
    u_long a = *(u_long*)(key1->data);
    u_long b = *(u_long*)(key2->data);
    return (a – b);
    }
    // get
    int ExtSKEYC(DB* dbp, const DBT* pkey, const DBT *pdata, DBT *skey)
    {

    skey->data = &((TID*)(pkey ->data))->stime;
    skey->size = sizeof(u_long);
    return 0;
    }
    int _tmain(int argc, _TCHAR* argv[])
    {
    DB* db_primary = NULL;
    DB* db_secondary = NULL;

    // PRIMARY DB
    int nRet = -1;
    // CREATE
    nRet = db_create(&db_primary, NULL, 0);
    // COMPARE
    nRet = db_primary->set_bt_compare(db_primary, primary_compare);
    // open
    nRet = db_primary->open(db_primary, NULL, “primary.db”, NULL, DB_BTREE, DB_CREATE,0);

    // SECONDARY DB
    nRet = db_create(&db_secondary, NULL, 0);
    // flag
    nRet = db_secondary->set_flags(db_secondary, DB_DUPSORT );
    // compare
    nRet = db_secondary->set_dup_compare(db_secondary, secondary_compare);
    // open
    nRet = db_secondary->open(db_secondary, NULL, “secondary.db”, NULL, DB_BTREE, DB_CREATE, 0);
    // associate
    nRet = db_primary->associate(db_primary, NULL, db_secondary, ExtSKEYC, 0);
    //以上每一步操作的 返回值即 nRet 都为 0,我在调试的时候确认过!
    // write
    DBT key, data;
    TID pindex = {0,0};
    for( int i = 0; i set_dup_compare”;
    data.size = strlen(“DB->set_dup_compare”) + 1;
    nRet = db_primary->put( db_primary, NULL, &key, &data, 0);
    }
    getchar();
    nRet = db_secondary->close(db_secondary, 0);
    nRet = db_primary->close(db_primary, 0);
    return 0;
    }
    二、还有就是一个主数据库加的次索引越多在存储的时候是不是越慢呢?会减慢的速率比例大约是多少?有没有什么技巧可以尽量提高速率?
    三、另外就是环境目录的设置,我按照BerkeleyDB提供的开发文档,上的介绍,设置环境变量 DB_HOME =…..;但是环境目录总是设不成功,而BDB提供的DB_CONFIG文件里面好像没有关于环境目录的配置,所以只能自已写配置文件,请问有没有什么方法可以配置环境目录的?
    四、关于多进程(或线程)中环境的移除问题到底是怎么一回事,我一直没有很好的明白,到目前为止都是当每个线程结束或开启时都将环境移除一次,这样会不会影响访问的效率?
    谢谢!!!

  26. chaohuang
    2010年1月25日11:22 | #26

    @xiaoxin
    请将你的问题发邮件给我 (chao.huang@ o***le.com)。

    另外,这篇文章讲得是招聘,请不要把非招聘相关的问题发到此篇blog下。谢谢。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.
注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。