Could you share more information:
   - What's the number of write_num?
   - What's the read throughput under your test?
   - Does the 5 bookie servers run in same machine?
   - Could you check whether StringUtil.div works well?
   - Could you also try async write API and tell us the output?

Regards,
Jiannan

From: "[email protected]<mailto:[email protected]>" 
<[email protected]<mailto:[email protected]>>
Reply-To: 
"[email protected]<mailto:[email protected]>"
 
<[email protected]<mailto:[email protected]>>
Date: Friday, October 17, 2014 at 3:38 PM
To: bookkeeper-user 
<[email protected]<mailto:[email protected]>>
Subject: hi, why write speed of bookkeeper-4.3.0 is very slow?

hi,
     I have tried bookkeeper-4.3.0 today. But its write speed is 4 entries per 
sec in my environment.
     There are 5 bookkeeper-server-4.3.0 in my env.
     Is there anything wrong? Test codes as follows:
public void syncWriteLedger(long write_num) throws InterruptedException, 
BKException {
byte[] pwd = "foobar".getBytes();
LedgerHandle lh = client.createLedger(3, 2,
DigestType.MAC, pwd);

long ledgerId = lh.getId();
System.out.println("ledgerId=" + ledgerId);
System.out
.println("data_len="
+ ("Hello World!afdafdafdfxtyb457u8n9,7.,pbesgcerfqx" + write_num)
.getBytes().length);
byte[] data = ("Hello World!afdafdafdfxtyb457u8n9,7.,pbesgcerfqx" + 
write_num).getBytes();
long st = System.currentTimeMillis();
for (int i = 0; i < write_num; i++) {
lh.addEntry(data);
}
long ut = System.currentTimeMillis() - st;
lh.close();
double uts = StringUtil.div(ut, 1000, 3);
double wspeed = StringUtil.div(write_num, uts, 2);
System.out.println("ut=" + ut + " ms, write_num=" + write_num
+ ", write speed=" + wspeed + "/s");


LedgerHandle lh2 = client.openLedger(ledgerId, BookKeeper.DigestType.MAC, pwd);
long lastEntry = lh2.getLastAddConfirmed();
st = System.currentTimeMillis();
Enumeration<LedgerEntry> entries = lh2.readEntries(0, lastEntry);
while (entries.hasMoreElements()) {
byte[] bytes = entries.nextElement().getEntry();
System.out.println(new String(bytes));
}
ut = System.currentTimeMillis() - st;
lh2.close();
uts = StringUtil.div(ut, 1000, 3);
double rspeed = StringUtil.div(write_num, uts, 2);
System.out.println("ut=" + ut + " ms, read_num=" + write_num
+ ", read speed=" + rspeed + "/s");

}
________________________________
[email protected]<mailto:[email protected]>

Reply via email to