Berkeley DB和C ++基准示例?

时间:2010-09-06 13:52:27

标签: c++ c oracle benchmarking berkeley-db

我正在尝试使用一些berkeley db和c ++代码运行基准测试,仅用于研究目的。目前我正在使用以下代码进行测试。我只使用递增整数来填充recors(为了更好的可读性,我省略了错误处理等内容)

(db是我自己的berkeley db类)

// Open the database
db.open( NULL, db_file_name.c_str(), NULL, DB_BTREE, open_flags, 0 );

int key_content = 4000;
int data_content = 4000;

DWORD start = ::GetTickCount(); // start counter

while( i <= p_count )
{
    /*sprintf_s( rec_buf, "my_record_%d", i ); 
    std::string description = rec_buf;*/


    Dbt key( &key_content, sizeof(int) );
    Dbt data( &data_content, sizeof(int) );

    db.put( NULL, &key, &data, DB_NOOVERWRITE );
}

    DWORD end = ::GetTickCount(); // stop counter
    DWORD duration = end - start;
    std::cout << "Duration for "  << p_count << " records: " << duration << " ms" << std::endl;

所以我的问题是,如果这是一种有效的基准测试方法,因为我对100.000 put-actions的时间约为1900 ms(~2secs)。在伯克利发表的一份白皮书中,他说他们每秒的结果是高达90.700次......在我的基准测试中,我每秒有大约50.000次投放行动。

有没有更好的方法来对伯克利进行基准测试? 你有开始和测试berkeley的代码示例吗?

提前致谢。

1 个答案:

答案 0 :(得分:2)

基本上只有当所有其他变量都是常数时,才能将性能数据与另一个基准测试结果进行比较。 这些变量可能是详尽无遗的,我会试着把它们中的一些

  1. 处理器。
  2. 内存
  3. 磁盘吞吐量
  4. 加载系统。
  5. 操作系统。
  6. 编译参数。
  7. 调整相应系统的参数,对OS和db进行基准测试。
  8. 数据大小。