0

カーソルで BTree をトラバースします (ドキュメントの例)

以下のコードを参照してください。

 kkey_t* p2;  // the type kkey_t is some struct
 int counter=0;
 BDBCUR *cur = tcbdbcurnew(bdb);
 tcbdbcurfirst(cur);
 while((p2 = (kkey_t*)tcbdbcurkey(cur, &len )) != NULL){ 
    printf("%u.%u\t%u\n",p2->type, p2->key, counter);
    free(p2);
    res = tcbdbcurnext(cur);
    if (!res) break;

    counter++;    
 }

で 562 418 レコードを取得しました が、150 000 000 以上のtcbdbrnum()ループがcounterあります... サイクル終了はありませんでした。

問題は何ですか?

ループサイズは 150652 サイクルであり、ループ オフセットはほぼ 1.3 * 150652 であることがわかりました。したがって、ファイルを 1 042 638 キーに増やし、ループサイズ = 280299 とします。recsize / loopsize の比率 = 3,73...

何をすべきか、それはアンループを持っていますか? ループが発生するのはなぜですか?

すべてのキーはサイズが 64 ビット (8 バイト) のランダムです。一部のキーを削除できました。

4

0 に答える 0