【发布时间】:2016-08-01 14:30:39
【问题描述】:
我有一个通过 AngularJS 运行的网络应用程序,我的服务器端通过码头运行,我的数据库是 MongoDB。现在,我的 webapp 访问数据库的方式是通过 websockets,但我觉得这可能不是最好/最快的方式,因为我发现处理数据需要大量时间.所以我想知道访问我的数据的最佳方式是通过 javascript、jetty 和 mongodb。谢谢! 浏览器代码:
getDataWebsocket.onmessage= function(event){
var data = "[{" +
event.data.substring(0, event.data.length-1) +
"]";
$scope.data = JSON.parse(data);
console.log(JSON.parse(data));
console.log($scope.data);
};
码头代码
try {
MongoClient mongoClient = new MongoClient("localhost", 27017);
DB db = mongoClient.getDB("MyDB");
DBCollection collection = db.getCollection("MyCollection");
DBCursor cursor = collection.find();
String data = "";
while (cursor.hasNext()){
DBObject next = cursor.next();
data += (JSON.serialize(next)).toString() + ",";
}
data = data.substring(0, data.length());
sendMessage(data, session);
}catch(Exception e){
sendMessage(e.getClass().getName() + ": " + e.getMessage(), session);
System.err.println(e.getClass().getName() + ": " + e.getMessage());
}
【问题讨论】:
-
能否附上任何代码、数据和请求示例?
-
让我印象深刻的是,您从您的收藏中获取并发送了所有文档。如果集合很大,则可能非常耗时。你真的需要一次所有的数据,使用分页不是更好吗?而且所有数据都是在客户端解析的,这也需要时间。
-
对于我的应用程序,我从一开始就需要所有数据,因此分页不是一个选项。就在服务器端解析数据而言,websockets 只有三种通信形式(字符串、类型化数组和 blob),所以我无法通过 websockets 从服务器发送 json。我对数据库没有经验,所以我想知道 websockets 是否真的是实现数据库通信的最佳方式。
-
Java 驱动程序使用自己的有线协议连接到数据库。使用什么协议在服务器和客户端(AngularJS)之间建立通信是您的选择。如果您的服务器必须将数据推送到客户端(似乎并非如此),您可以使用 http 或 websocket。
-
出于好奇,您能解释一下为什么一开始就需要所有数据吗?