سلام من از مونگو از طریق مورفیا در جاوا استفاده میکنم
مشکلم اینه که کانکشن های مونگو هی زیاد و زیاد تر میشه تا اینکه سرورش دیگه جواب نمیده
من هر جا کانکت کردم پس از اتمام عملیات کانکتشن رو بستم اما نمی دونم مشکل کجاست که بازم بعضی و قتا باز می مونه
سلام من از مونگو از طریق مورفیا در جاوا استفاده میکنم
مشکلم اینه که کانکشن های مونگو هی زیاد و زیاد تر میشه تا اینکه سرورش دیگه جواب نمیده
من هر جا کانکت کردم پس از اتمام عملیات کانکتشن رو بستم اما نمی دونم مشکل کجاست که بازم بعضی و قتا باز می مونه
شما دو جنبه رو باید بررسی کنی:
یکی اینکه گاهی مدل و معماری کانکشن زدن شما ایراد داره و داری بیخودی و زیاد کانکشن درست میکنی در حالیکه می تونستی کانکشن هات رو reuse بکنی.
دو اینکه جایی که نمیشه خیلی reuse کرد باید از Connection Pooling استفاده کنید تا تعداد کانکشن ها محدود بمونه.
Morphia از Connection Pooling پشتیبانی نمیکنه. اما کلاینت های دیگه هم هستن
و این رو هم بخون شاید از کانکشن هات درست استفاده نمیکنی.
من مودل استفادم فرق میکنه از مورفیا استفاده کردم
package framework;
import com.google.code.morphia.Datastore;
import com.google.code.morphia.Morphia;
import com.mongodb.Mongo;
import java.net.UnknownHostException;
public class MongoConnectionManager {
private static final MongoConnectionManager INSTANCE = new MongoConnectionManager();
private final Datastore ds;
private final Mongo mongo;
private final Morphia morphia = new Morphia();
public static final String DB_NAME = "Ordering";
public MongoConnectionManager() {
try {
mongo = new Mongo("localhost", 27017);
// mongo = new Mongo("localhost", 59482);
morphia.mapPackage("model");
ds = morphia.createDatastore(mongo, DB_NAME);
//t3
ds.ensureIndexes();
//test2
ds.ensureCaps();
} catch (UnknownHostException e) {
throw new RuntimeException("Error initializing mongo db", e);
}
}
public void close() {
mongo.close();
}
مثلا استفاده
MongoConnectionManager conMongo = new MongoConnectionManager();try {
OrderDao ordersDao = new OrderDaoImpl(Orders.class, conMongo.getDs());
DashboardManagment dashboard = (DashboardManagment) FacesContext.getCurrentInstance().getExternalConte xt().getSessionMap().get("dashboard");
ProvidersManagment ProviderM = (ProvidersManagment) FacesContext.getCurrentInstance().getExternalConte xt().getSessionMap().get("providerManager");
if (dashboard.getCurrentCustomer().getCustomerID() != null) {
this.addressList = ordersDao.getAddressOrders(dashboard.getCurrentCus tomer());
conMongo.close(); }
}
کلا هر جا کانکشن باز کردم بستم اما بازم وقتی برنامه اجرا میشه می بینی کانکشن باز مونده
حالا اگه بشه کلا کانکشن هارو بست یا یه کاری کرد خودشون خود بخود بسته بشن
خیلی خوب میشه
آخرین ویرایش به وسیله مبین رنجبر : دوشنبه 16 تیر 1393 در 12:28 عصر
من به درایور Morphia آشنا نیستم ولی تحقیق کردم در هیچ مثال و توضیحی صحبتی از بستن کانکشن به میان نیامده است.حتی در مستندات اصلی مانگو دی بی برای Morphia هم مطرح شده که "آیا نیاز است که ارتباط بسته شود؟" که پاسخ داده شده که نیاز نیست.خود درایور همانطور که بهراد عزیز گفت Connection Pool برای هر نمونه یا Instance مانگو ساخته می شود.برای آزاد کردن منابع هم کافیه که از نمونه مانگو استفاده نشود و یا به احتمال زیاد نمونه یا Instance آزاد شود.منبع :
https://github.com/mongodb/morphia/w...AskedQuestions
Mobin Ranjbar
Software Engineer, Big Data Evangelist and Startup Guy
www.linkedin.com/in/mobinranjbar
www.MobinRanjbar.com
www.Hadoop.ir
www.BigDataWatcher.com
< به سوالات و درخواست هایی مبنی بر ارسال سورس کد ، نوشتن برنامه و ... از طریق پیام خصوصی پاسخ داده نمی شود >
با تشکر
مشکل من رفع شد علت ان بود که در بعضی مواقع کانکشن ها بسته نمی شد و با توجه به مراجعه زیاد به بانک تعداد کانکشن های باز بالا میرفت تا 2000 بعد منگو احتمالا بخاطر کم بود فضای رم دیگه کانکشن نمیداد. که خدا رو شکر بر طرف شد
..............
اما کانکشن هارو خودش نمی بست چرا که بر نامه همچنان اجرا بود و کانکشن ها هم باز می ماند
حالا شما می گین نیاز به بستن کانکشن نیست اون روش رو من بلد نیستم
همیشه باید مستندات کلاینت مورد نظرتون رو بخونید و سعی کنید همونطور که اون توصیه کرده از کانکشن ها استفاده کنید تا اینجور موارد پیش نیاد....