[英]Query results of Cassandra DB
我正在创建一个基于Cassandra的Web应用程序:到目前为止使用Play Framework。 我通过Java驱动程序与Cassandra连接但是如何将查询结果嵌入到我的前端? 详细信息:我有一个用户列系列,并希望在我的页面上显示所有用户。 有没有选项可以在HTML或JavaScript中嵌入查询结果? 或者还有其他方法常见吗?
在此先感谢并欢呼!
典型的方法是从可以动态构建它们的服务器提供您的网页。 java的一个例子是提供最初由服务器处理的jsp模板的页面(例如tomcat或glassfish),这些页面被处理成html。
所以像这样:
backend java queries cassandra (SELECT * FROM users)
-> passes results to jsp
-> jsp gets processed into html by server
-> server sends html to user.
用于演示cassandra的Web应用程序是一个如何使用C *构建twitter克隆的示例。 此repo显示了如何使用java和cassandra来提供网页。
播放使用“Twirl”作为模板引擎。 当然,您可以将其更改为使用您喜欢的任何一个。 最简单的输出仍然是纯文本。
你使用Play和Cassandra。 它们都是为异步编程而创建的。 所以最有效的方法是利用这种能力。
还有一点 - 你打算打印所有用户,这意味着结果可能很大。 更好的方法是通过块打印,如视频流,其他方式,结果可能是如此巨大,以至于服务器内存可能不足以同时为少量请求。
我编写了一个简单的“单功能”解决方案,以便于理解。 最好将它拆分为真实程序。
package controllers;
import play.*;
import play.mvc.*;
import views.html.*;
import java.io.StringWriter;
import java.io.PrintWriter;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.MoreExecutors;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.ResultSetFuture;
public class Application extends Controller {
public Result users(){
// Cassandra connection information.
String node = "localhost";
int port = 9042;
// Connect to the cassandra.
Cluster cluster = Cluster.builder()
.addContactPoint(node)
.withPort(port)
.build();
Session session = cluster.connect();
// Prepare output.
Chunks<String> chunks = new StringChunks() {
public void onReady(Chunks.Out<String> out) {
// Query data from the cassandra.
String query = "SELECT * FROM mykeyspace.users";
// Do asynchronious query to the cassandra.
ResultSetFuture resultSet = session.executeAsync(query);
Futures.addCallback(resultSet,
new FutureCallback<ResultSet>() {
@Override
public void onSuccess(ResultSet set) {
try {
// This cycle asynchronious as well.
// It will fetch some data, then process it, then fetch more
// All this done by cassandra driver
set.forEach(row -> {
// Just plain text. You can output JSON as well.
out.write(row.toString());
out.write("\n");
});
} finally {
out.close();
}
}
@Override
public void onFailure(Throwable t) {
StringWriter sw = new StringWriter();
t.printStackTrace(new PrintWriter(sw));
out.write(sw.toString());
out.close();
}
}, MoreExecutors.sameThreadExecutor());
}
};
return ok(chunks);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.