2

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

(db是我自己的伯克利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 次放置操作的时间约为 1900 毫秒(约 2 秒)。在伯克利发布的一份白皮书中,他们说他们每秒有高达 90.700 个 put-actions 的结果......通过我的基准测试,我每秒大约有 50.000 个 put-actions。

有没有更好的方法来衡量伯克利?您是否有任何代码示例用于开始和测试 berkeley?

提前致谢。

4

1 回答 1

2

基本上,只有当所有其他变量都不变时,才能将性能数据与另一个基准测试结果进行比较。这些变量可能很详尽,我将尝试将其中一些

  1. 处理器。
  2. 记忆
  3. 磁盘吞吐量
  4. 在系统上加载。
  5. 操作系统。
  6. 编译参数。
  7. 调整相应系统的参数,同时对 OS 和 db 进行基准测试。
  8. 数据大小。
于 2010-09-06T14:25:33.840 回答