我正在与 Prevayler 合作,进行一些非常简单的压力测试。
在我的程序中,我可以在 500 毫秒内获得 10,000 次读取,但写入或更改一个对象需要 23 毫秒。(我没有这台电脑的详细规格。没什么令人印象深刻的。双核 3.0ghz,7200rpm HD,可能还有 1333mhz ddr3 内存。)
序列化似乎是瓶颈。
可以做些什么来提高写入/更改性能?
JProfiler 我在 JProfiler 中运行程序(将 10,000 个用户对象写入磁盘。),它运行了 250 秒,其中 99.6% 用于运行 org.implementation.PrevaylerImpl.execute
更新 我切换到 XStreamSerializer,它将写入速度提高到每次写入 21 毫秒,并减少了存储
3555KB 日志/10,000 个对象 -> 2421KB
350KB 快照/10,000 个对象 -> 313KB
我希望看到 1000+ 次写入/秒。
---- Main Method ----
Transactor trans = new Transactor();
for(int i =0;i<10000;i++)
{
trans.createUser("Username", "PasswordHash");
}
---- Transactor Class ----
public void createUser(String Username, String PasswordHash) {
String id = Helper.randomID();
//Avoids id duplicates, id is 7 digit base58. (Like Bitcoin, but shorter.)
//ID generation takes .0078ms.
while(getUser(id)!=null)
{
id=Helper.randomID();
}
prevayler.execute(new CreateUser(Username, PasswordHash,id));
}
---- CreateUser Class ----
public class CreateUser implements Transaction, Serializable{
String Username;
String PasswordHash;
String id;
public CreateUser(String Username, String PasswordHash, String id)
{
this.Username = Username;
this.PasswordHash = PasswordHash;
this.id = id;
}
public void executeOn(Object core,Date date) {
((Core)core).store(new User(Username, PasswordHash), id);
}
}
---- Core Class (Store method) ----
private final Map<String,Object> dataMap = new HashMap<String,Object>();
public void store(Object object, String id) {
dataMap.put(id, object);
//Adds User id to a seperate ArrayList<String>
if(object instanceof User )
{
userList.add(id);
}
}