데이터 및 사용자라는 두 가지 컬렉션이 있습니다. 데이터 수집에는 약 300 ~ 800 명의 사용자로 구성된 사용자 ID의 배열이 있습니다.유성 : Big Data에 대한 MongoDB Join의 속도가 빨라 집니까?
데이터 컬렉션의 각 행에 대해 모든 사용자의 국가에 가입해야합니다. 너무 많은 데이터가 한 번에 쿼리되기 때문에 웹 브라우저가 중단됩니다.
Data Collection의 약 16 행을 한 번에 쿼리하고 지금까지 Users 컬렉션에 18833 명의 사용자가 있습니다.
지금까지 저는 Meteor 메소드와 Meteor 컬렉션에 대한 transform() JOIN을 모두 만들려고했습니다. 이는 내 앱을 걸고있는 것입니다.
몽고 컬렉션 :
UserInfo = new Mongo.Collection("userInfo")
GlyphInfo = new Mongo.Collection("GlyphAllinOne", {
transform: function(doc) {
doc.peopleInfo = doc.peopleInfo.forEach(function(person) {
person.code3 = UserInfo.findOne({userId: person.name}).code3;
return person;
})
return doc;
}
});
'CODE3는'사용자의 국가를 지정합니다.
출판 :
Meteor.publish("glyphInfo", function (courseId) {
this.unblock();
var query = {};
if (courseId) query.courseId = courseId;
return [GlyphInfo.find(query), UserInfo.find({})];
})
테스트 서버 방법 :
Meteor.methods({
'glyph.countryDistribution': function(courseId) {
var query = {};
if (courseId) query.courseId = courseId;
var glyphs = _.map(_.pluck(GlyphInfo.find(query).fetch(), 'peopleInfo'), function(glyph) {
_.map(glyph, function(user) {
var data = Users.findOne({userId: user.name});
if (data) {
user.country = data ? data.code3 : null;
console.log(user.country)
return user;
}
});
return glyph;
});
return glyphs;
}
});
컬렉션 데이터 :
은 prepro의 옵션이 있습니다 내 컬렉션을 종결하여 국가가 이미 포함되어 있지만 컬렉션을 수정할 수는 없습니다. 나는이 JOIN을 서버 시작시에 수행하고 그 후에 Meteor 메소드가 배열을 통해 노출되면 서버의 시작 시간을 너무 오래 지연시킬 수 있다고 추정한다. 나는 잘 모르겠지만.
누구든지이 쿼리의 속도를 높이는 방법에 대한 아이디어가 있습니까?
EDIT : MongoDB 집계 명령도 시도했는데 Meteor의 minimongo에서는 매우 느립니다. 네이티브 MongoDB 클라이언트에서 1 초와 비교하여 쿼리하는 데 4 분이 걸렸습니다.
서버에서var codes = GlyphInfo.aggregate([
{$unwind: "$peopleInfo"},
{$lookup: {
from: "users",
localField: "peopleInfo.name",
foreignField: "userId",
as: "details"
}
},
{$unwind: "$details"},
{$project: {"peopleInfo.Count": 1, "details.code3": 1}}
])
사용하여 나는 약간 다르게이 문제를 접근 할
문서를 텍스트로 덤프하십시오 ..... – profesor79
나는 작업중인 텍스트의 문서로 작업 할 수 없습니다. – Dranithix
집계가 minimongo에 대해 실행되지 않으며 서버 측만 실행됩니다. –