The write speed of bookkeper that version less than 4.30 is bigger than 1200
entries per second when i use the same test code
[email protected]
From: Jiannan WangDate: 2014-10-17 18:31To: [email protected]:
[email protected]: Re: hi, why write speed of
bookkeeper-4.3.0 is very slow?
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]" <[email protected]>
Reply-To: "[email protected]"
<[email protected]>
Date: Friday, October 17, 2014 at 3:38 PM
To: bookkeeper-user <[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]