我读了一篇名为"Paxos简单"的论文,但仍有一些混淆:
"paxos算法的实例"是指什么?每个实例都表明外部客户端有输入/命令吗?并且每个实例的paxos算法将并行执行???
如果只有一个能够发出提案的"杰出"提议者,那么paxos算法与2阶段提交算法的区别是什么?
我们在哪里可以在实际项目中应用paxos算法?
这篇论文似乎给出了更清晰的描述:http: //research.microsoft.com/pubs/64634/web-dsn-submission.pdf
还有什么想法?
我想生成一个字符串,如sql命令:
"INSERT INTO xxx VALUES(XXX, XXX, XXX)"
Run Code Online (Sandbox Code Playgroud)
目前我使用StringBuilder和一些String常量像"INSERT INTO"来连接表名和插入值的输入字符串参数.
但是,除了性能问题之外,这种简单的连接看起来并不优雅.有没有其他方法这样做?
在我看来,JDBC的预处理语句是这种"命令模板"的一个很好的例子:
PreparedStatement pstmt=connection.createPreparedStatement("INSERT INTO ? VALUES(?,?,?)");
Run Code Online (Sandbox Code Playgroud)
然后你可以设置表名和插入值.
pstmt.setString(1,"tableA");
pstmt.setInt(2, 100);
...
Run Code Online (Sandbox Code Playgroud)
但是,我不能使用预备语句,因为我想要的只是String ...
有人给我一些提示使用java.util.Regex或JavaCC来生成String.但据我所知,无论选择什么代码优势问题,Java String必须由类似的东西生成StringBuilder,对吧???
StringTemplate insert = new StringTemplate("insert $table$ values($value;separator=\",\"$)");
int testSize = 10000;
for(int i=0;i<testSize;i++) {
insert.setAttribute("table", "aTable");
String[] vs = {"1", "1", "'aaa'", "'bbb'"};
for(int j = 0;j < vs.length;j++){
insert.setAttribute("value", vs[j]);
}
insert.toString();
insert.reset();
}
Run Code Online (Sandbox Code Playgroud)
上面会比普通的StringBuilder慢大约5倍....
int testSize = 10000;
StringBuilder sb= new StringBuilder(100);
for(int i=0; i<testSize; i++) {
sb.append("INSERT ").append("aTable (");
String[] v = {"1", "1", "'aaa'", "'bbb'"};
for(int j=0; j<v.length; j++) {
if(j > 0) {
sb.append(",");
}
sb.append(v[j]);
}
sb.append(")");
sb.toString();
}
Run Code Online (Sandbox Code Playgroud)
关于如何提高StringTemplate效率的任何想法或建议?谢谢!StringTemplate似乎在每个令牌上调用toString(),对吗?